我做了研究,但我搞不明白,對不起! 谷歌只能幫我加個字符,但不刪除字符...如何使用批處理腳本刪除文件夾名稱的前7個字符?
迪爾E:\Movies\2011\
有幾個文件夾 例如說下
[0603] Movie_1
[0708] Movie_2
[0811] Movie_3
等..
所以我想運行一個批處理腳本刪除日期標籤 即
Movie_1
Movie_2
Movie_3
等
我使用Windows 8。
我做了研究,但我搞不明白,對不起! 谷歌只能幫我加個字符,但不刪除字符...如何使用批處理腳本刪除文件夾名稱的前7個字符?
迪爾E:\Movies\2011\
有幾個文件夾 例如說下
[0603] Movie_1
[0708] Movie_2
[0811] Movie_3
等..
所以我想運行一個批處理腳本刪除日期標籤 即
Movie_1
Movie_2
Movie_3
等
我使用Windows 8。
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
您可以使用增強型變量替換功能來執行此操作(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
來完成真正的工作。
由於您使用的是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命令行上運行的,但它可以被移動到腳本中,使其更加可重用。
重命名子文件夾,但不是文件夾內的文件名 我想我需要在for循環中添加/ d! 謝謝! – user2158771 2013-03-12 00:11:43
如何傳遞一個參數來替換長度(這裏是7)? – Kangkan 2015-06-02 11:57:36
查看上面的更新 – 2015-06-05 00:37:26