2010-03-29 192 views
2

我期待創建一個Windows批處理腳本來移動大約2,000個文件並將它們分開,以便每個文件夾有10個文件。我試圖創建一個批處理腳本,但是這個語法確實使我的腦海裏浮現出來。以下是我迄今爲止將一個目錄中的大量文件移動到多個目錄

@echo off 

:: Config parameters 
set /a groupsize = 10 
:: initial counter, everytime counter is 1, we create new folder 
set /a n = 1 
:: folder counter 
set /a nf = 1 

for %%f in (*.txt) do (
:: if counter is 1, create new folder 
if %n% == 1 (
    md folder%nf% 
    set /a n += 1 
) 

:: move file into folder 
mv -Y %%f folder%nf%\%%f 

:: reset counter if larger than group size 
if %n% == %groupsize% (
    set /a n = 1 
) else (
    set /a n += 1 
) 
) 
pause 

基本上這個腳本的作用是通過目錄中的每個.txt文件循環。它在開始時創建一個新目錄,並將10個文件移動到該目錄中,然後再次創建一個新文件夾並將另外10個文件移動到該目錄中,依此類推。但是,我遇到的問題是n變量在循環中沒有增加?我敢肯定還有其他錯誤,因爲即使在pause的CMD窗口關閉了。任何幫助或指導表示讚賞,謝謝你的時間!

+0

@布賴恩:給我一個版本的Windows自帶的Python或Perl安裝......其他語言都很好,但也有仍然使用批處理文件很多正當的理由。此外,上面的代碼並不複雜。我看到(和寫)更糟。 – Joey 2010-03-30 00:08:26

回答

7

有幾件事情你需要知道:

  • SETLOCAL ENABLEDELAYEDEXPANSION是必要的,因爲你改變的變量,並在一個括號的塊使用他們的變化值。命令行上的SET /?將給出一些信息。在互聯網上搜索這個詞,你會找到更好的解釋。
  • 我使用變量!nf!格式的地方與延遲擴展有關。
  • 由於ghostdog74提到,你沒有增加%nf%
  • 我將nf初始化爲0而不是1.這樣,要將文件移動到的文件夾號與您剛剛創建的文件夾號相同。在您的代碼中,創建folderX,然後增加X,然後嘗試將該文件移至X + 1。
  • 您必須使用MOVE才能移動文件,MV無效。

這個批處理文件的工作原理...但確保你測試!我只在少量文件上進行測試。

@ECHO OFF 

SETLOCAL ENABLEDELAYEDEXPANSION 

:: Config parameters 
SET groupsize=10 
:: initial counter, everytime counter is 1, we create new folder 
SET n=1 
:: folder counter 
SET nf=0 

FOR %%f IN (*.txt) DO (
    :: if counter is 1, create new folder 
    IF !n!==1 (
    SET /A nf+=1 
    MD folder!nf! 
) 

    :: move file into folder 
    MOVE /Y "%%f" folder!nf! 

    :: reset counter if larger than group size 
    IF !n!==!groupsize! (
    SET n=1 
) ELSE (
    SET /A n+=1 
) 
) 

ENDLOCAL 

PAUSE 
+0

感謝編輯Johannes。當我說ENABLEDELAYEDEXANSION需要數學工作時,我簡化了。這不是真的。但是,您確實需要它隨着它的變化來訪問它。 – aphoria 2010-03-30 15:10:19

+0

謝謝,明天我會接受這個答案:) – axsuul 2010-03-31 07:17:53

+0

這工作完美,謝謝你的幫助:) – axsuul 2010-03-31 20:33:35

相關問題