2016-03-02 50 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」