2010-05-30 47 views
0

請原諒我,如果這也不是問這些問題的地方,我是批處理和腳本的新手,並且對這些帖子有點新...移動和重命名文件,保留擴展名,但在批處理文件中包含子目錄

我有一個將接收文件和文件夾的文件夾,我想運行一個腳本來查看目錄並以數字方式重命名每個子文件夾中的所有文件,並在可能的情況下移動它們。

例如,我有東西,看起來像下面

Recieved_File_Folder 
    |_folder1 
    | |_file1.txt 
    | |_file2.bmp 
    |_folder2 
    | |_file4.exe 
    | |_file5.bmp 
    |__file9.txt 
    |__file10.jpg 

我想可以看看在每一個目錄,並將其移動到這樣的事情,記住文件的名稱將是隨機,我也想保持擴展完整。

Renamed_Folder 
    |_folder1 
    | |_1.txt 
    | |_2.bmp 
    |_folder2 
    | |_1.exe 
    | |_2.bmp 
    |__1.txt 
    |__2.jpg 

我已經花了很多時間在這個,並沒有做得太好,任何幫助將非常感謝!先謝謝你!

回答

1

這個小腳本應該做的伎倆:

@ECHO OFF 

SETLOCAL ENABLEDELAYEDEXPANSION 

FOR /F "tokens=1 delims=" %%A IN ('DIR /B /S /A:D') DO (

    SET /A FILE_COUNTER=1 

    FOR /F "tokens=1 delims=" %%B IN ('DIR /B /A:-D "%%A"') DO (
     CALL :RENAME "%%A%%B" !FILE_COUNTER! 
     SET /A FILE_COUNTER=FILE_COUNTER+1 
    ) 
) 

ENDLOCAL  
GOTO :EOF  

:RENAME 

SET OLD_PATH="%~f1" 
SET NEW_FILE_NAME="%2%~x1" 
REN %OLD_NAME% %NEW_NAME%  
GOTO :EOF 

小心爲腳本中使用也不會要求確認,所以看出來你來自哪裏下手吧!

它是如何工作:

  • 第一FOR -loop列出了所有的子目錄遞歸,從當前目錄(使用DIR /B /S /A:D),並通過傳遞到循環體的完整路徑可變%%A
  • 在第一環體
  • 可變FILE_COUNTER設置爲1
  • 的值的第二(內) FOR -loop列出所有文件由外環(使用DIR /B /A:-D "%%A")傳遞的目錄,並在內部循環體的子過程:RENAME通過經由可變%%B
  • 文件的完整路徑,它的身體被稱爲具有完整的文件命名當前FILE_COUNTER值作爲它的參數
  • :RENAME子例程使用它的參數,以形成新的文件名併發出一個重命名命令REN
  • 子例程返回之後,電流FILE_COUNTER值被加一(SET /A FILE_COUNTER=FILE_COUNTER+1
+0

Frank, 非常感謝!我沒有使用你寫的確切代碼,儘管我使用了它的大部分,它已經幫助了很多! 非常有用,非常感謝您花時間爲我寫這篇文章,非常感謝。 – Ser1esII 2010-06-01 00:45:48

+0

不客氣。如果您認爲答案可以解決您的問題或對您有用,那麼接受它就很好(標記標題下面的chekbox)。 – 2010-06-01 07:24:51

相關問題