2016-03-02 32 views
0

下面是我的dir命令:使用仁不给我,结果我预期

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 

,我的目标是把所有的文件名

我试图ren *_* *.*但是,这并不工作脱衣_comp

我的思维过程是,在一个例子:

ren *_* *_NEW.* 

替换所有_comp_NEW

,所以我想给刚刚从第二个参数如上删除,但它不工作,因为我通缉。

我的逻辑错在哪里?我敢打赌,这个正则表达式不知何故是懒惰的,只是最终将它重命名为它的原型。

任何线索?

+0

哦,错子取代 “_comp”。谢谢,糟糕的编辑。 – Fallenreaper

+0

你不能用一个REN命令来做你想做的事。有关解释,请参见[Windows RENAME命令如何解释通配符?](http://superuser.com/q/475874/109090)。 – dbenham

回答

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”。

读取每个文件名相匹配的掩模,替换没什么指定为%1

BTW字符串,改变到

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

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

*thisbatch* _comp 

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

*thisbatch* _comp abcd 

将与 “ABCD”