以下是我的目录命令:
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
所以我想从上面的第二个参数中删除它,但它并不像我想的那样工作。
我的逻辑在哪里错了?我敢打赌,正则表达式在某种程度上是懒惰的,只是最终将它重命名为它的确如此。
有任何线索吗?
答案 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”