使用 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 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将 ECHO(REN
更改为 REN
以实际重命名文件。
运行
*thisbatch* _comp
从文件名中删除字符串“_comp”。
读取每个与掩码匹配的文件名,用 nothing 替换指定为 %1
的字符串
顺便说一句,更改为
SET "filename=!filename:%~1=%~2!"
应该用文件名中的第二个替换第一个提供的字符串,所以
*thisbatch* _comp
将从文件名中删除字符串“_comp”。
和
*thisbatch* _comp abcd
将用 "abcd"
替换“_comp”
下面是我的目录命令:
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 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将 ECHO(REN
更改为 REN
以实际重命名文件。
运行
*thisbatch* _comp
从文件名中删除字符串“_comp”。
读取每个与掩码匹配的文件名,用 nothing 替换指定为 %1
的字符串顺便说一句,更改为
SET "filename=!filename:%~1=%~2!"
应该用文件名中的第二个替换第一个提供的字符串,所以
*thisbatch* _comp
将从文件名中删除字符串“_comp”。
和
*thisbatch* _comp abcd
将用 "abcd"
替换“_comp”