批處理:批量分類移動文件

    下面是一個移動多個文件到以各個文件的後綴名命名的文件夾中的批處理文件,當有重名文件時,會自動重命名文件後再移動:

@echo off
setlocal EnableDelayedExpansion
:NEXT
for /r D:\testfolder\t\ %%i in (*.*) do (
set t=%%~xi
set f=!t:~1,5!
set p=%%~dpi
set n=%%~nxi
if exist D:\testfolder\test\!f!\!n! (
rename !p!!n! n!n!
set a=1
)else move !p!!n! D:\testfolder\test\!f!\!n!
)
if !a! equ 1 (
set a=0
goto NEXT
)
PAUSE


    使用時,要把D:\testfolder\t\ 改成源文件所在文件夾路徑;把D:\testfolder\test\改成目標文件夾的路徑,但是要保證目標文件夾內有這些後綴名命名的文件夾。


相關知識:


for /參數 %變量 in (集) do 命令
FOR分四種參數 D L R F

參數 /R
/R參數之後還可帶盤符及路徑
for /r 此處可以帶有路徑 %變量 in (集) do 命令
在/r 之後的那個路徑,指包含它之下的整個目錄樹(相當於DOS命令tree裏的範圍)中的所有目錄,如果僅爲一個英文句點 . ,是指當前路徑下的目錄樹,如果省略了路徑則特指當前目錄,而之後的in (集)則相當於與前面每個目錄相配的文件集



FOR 變量參照的替換已被增強。您現在可以使用下列
選項語法:

~I - 刪除任何引號("),擴展 %I
%~fI - 將 %I 擴展到一個完全合格的路徑名
%~dI - 僅將 %I 擴展到一個驅動器號
%~pI - 僅將 %I 擴展到一個路徑
%~nI - 僅將 %I 擴展到一個文件名
%~xI - 僅將 %I 擴展到一個文件擴展名
%~sI - 擴展的路徑只含有短名
%~aI - 將 %I 擴展到文件的文件屬性
%~tI - 將 %I 擴展到文件的日期/時間
%~zI - 將 %I 擴展到文件的大小
%~$PATH:I - 查找列在路徑環境變量的目錄,並將 %I 擴展
到找到的第一個完全合格的名稱。如果環境變量名
未被定義,或者沒有找到文件,此組合鍵會擴展到
空字符串

可以組合修飾符來得到多重結果。

詳細出處參考:http://www.jb51.net/article/31284.htm


同理,下面再附一個批量修改文件名的批處理文件:
@echo off
setlocal EnableDelayedExpansion
for /r H:\path_x\ %%i in (*.*) do (
set s=%%i
set n=%%~nxi
set b=!n:~0,3!
set c=!n:~3!
if "!b!"=="abc" (
rename !s! abd!c!
)
)
PAUSE


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章