使用 ren 没有给我预期的结果

using ren does not give me the results i expected

下面是我的目录命令:

03/02/2016  02:25 PM    <DIR>          .
03/02/2016  02:25 PM    <DIR>          ..
03/01/2016  05:28 PM               342 agent_comp.css
03/01/2016  05:27 PM             1,581 agent_comp.dart
03/01/2016  05:25 PM             3,017 agent_comp.html
03/01/2016  04:54 PM               343 array_comp.css
03/01/2016  05:02 PM             1,965 array_comp.dart
03/01/2016  05:02 PM             2,191 array_comp.html
03/01/2016  04:54 PM               343 server_comp.css
03/01/2016  05:11 PM             1,481 server_comp.dart
03/01/2016  05:16 PM             2,033 server_comp.html
03/02/2016  01:04 PM             1,542 system_status_comp.dart
03/01/2016  04:52 PM               647 system_status_comp.html
          11 File(s)         15,485 bytes
           2 Dir(s)  223,731,183,616 bytes free

我的目标是从所有文件名中删除 _comp

我正在尝试 ren *_* *.* 但那行不通。

我的思考过程是在一个例子中:

ren *_* *_NEW.*

将所有 _comp 替换为 _NEW

所以我想像上面那样从第二个参数中删除它,但它并没有像我想要的那样工作。

我的逻辑错在哪里?我敢打赌正则表达式在某种程度上是懒惰的,只是最终将它重命名为原来的样子。

有线索吗?

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
FOR /f "delims=" %%a IN (
 'dir /b /a-d "%sourcedir%\*%~1*" '
) DO (
 SET "filename=%%~na"
 SET "filename=!filename:%~1=!"
 ECHO(REN "%sourcedir%\%%a" "!filename!%%~xa"
)

GOTO :EOF

您需要更改 sourcedir 的设置以适合您的情况。

所需的 REN 命令仅 ECHOed 用于测试目的。 确认命令正确后,将 ECHO(REN 更改为 REN 以实际重命名文件。

运行

*thisbatch* _comp

从文件名中删除字符串“_comp”。

读取每个与掩码匹配的文件名,用 nothing 替换指定为 %1

的字符串

顺便说一句,更改为

 SET "filename=!filename:%~1=%~2!"

应该用文件名中的第二个替换第一个提供的字符串,所以

*thisbatch* _comp

将从文件名中删除字符串“_comp”。

*thisbatch* _comp abcd

将用 "abcd"

替换“_comp”