使用仁并没有给我我预期的结果

时间:2016-03-02 19:32:10

标签: batch-file cmd batch-rename

以下是我的目录命令:

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

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

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

有任何线索吗?

1 个答案:

答案 0 :(得分:1)

@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命令仅为ECHO在您确认命令正确后,将ECHO(REN更改为REN以实际重命名文件。

运行

*thisbatch* _comp

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

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

BTW,改为

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

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

*thisbatch* _comp

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

*thisbatch* _comp abcd

将“_ comp”替换为“abcd”