2013-03-11 57 views
1

我做了研究,但我搞不明白,對不起! 谷歌只能幫我加個字符,但不刪除字符...如何使用批處理腳本刪除文件夾名稱的前7個字符?

迪爾E:\Movies\2011\

有幾個文件夾 例如說下

[0603] Movie_1 

[0708] Movie_2 

[0811] Movie_3 

等..

所以我想運行一個批處理腳本刪除日期標籤 即

Movie_1 

Movie_2 

Movie_3 

我使用Windows 8。

回答

3

RENAMER.CMD

@echo off 
setlocal enableextensions enabledelayedexpansion 
for %%i in (*) do (set name=%%i && ren "!name!" "!name:~7!") 
endlocal 

說明:

SETLOCAL/ENDLOCAL東西只是確保該腳本將工作無論您的默認命令行設置是什麼。如果確保缺省情況下啓用了命令擴展和延遲擴展,或者使用cmd/e:on/v:在上啓動命令提示符,那麼這些行是可選的。

對於聲明是事情的核心。它使用(*)選擇目錄中的每個文件。如果您只想更改具有特定擴展名的文件,則可以使用不同的模式,例如(* .avi)。然後!名稱:〜7!需要從前面七個字符。 set /?列出了一些您可以執行的其他操作。大多數示例使用而不是但所有的字符串操作都適用於兩者。

更新回答評論

你可以在裏面一個執行%替代!代換。

@echo off 
setlocal enableextensions enabledelayedexpansion 
set numtrim=7 
for %%i in (*) do (set name=%%i && ren "!name!" "!name:~%numtrim%!") 
endlocal 
+0

重命名子文件夾,但不是文件夾內的文件名 我想我需要在for循環中添加/ d! 謝謝! – user2158771 2013-03-12 00:11:43

+0

如何傳遞一個參數來替換長度(這裏是7)? – Kangkan 2015-06-02 11:57:36

+0

查看上面的更新 – 2015-06-05 00:37:26

0

您可以使用增強型變量替換功能來執行此操作(SET /?供參考):

@echo off 
setlocal 
for /d %%i in (*) do call :rename %%i 
goto :eof 
:rename 
set CURDIR=%1 
echo ren "%CURDIR%" "%CURDIR:~7%" 

魔術發生在%CURDIR:~7%,意思是「的%CURDIR%值,但跳過前7個字符」。

批處理文件上面沒有任何重命名(它只是打印 rename命令),因此你可以首先做一個預演,然後取下最後echo來完成真正的工作。

0

由於您使用的是Win8,因此您可以使用powershell來完成此操作。以下是我用來打開

blah11-1 blah12-1 blah13-1

blah11 blah12 blah13

C:\測試>目錄-Directory | foreach {if($ .Name.Length -gt 6){$ fileName = $ .Name.SubString(0,6)} else {$ fileName = $ .Name};重命名項目路徑$。完整名稱 - 新名稱$文件名; }

現在,這就是我在powershell命令行上運行的,但它可以被移動到腳本中,使其更加可重用。

相關問題