2013-10-24 87 views
0

我做了一個腳本,從源代碼副本隨機文件夾到目的地,直到該文件夾​​已滿(知道目標文件夾小則源。複製隨機文件夾很快

所有各個部件的工作如目的,但我現在運行的腳本沒有包括副本(只是一個回聲),所以基本上,如果沒有任何文件夾大於目標目錄中的剩餘空間,它應該永遠運行。但它平均停止5次迭代,而沒有足夠大的文件夾來填充目錄。這是我正在使用的代碼

編輯:得到它olmost的工作,但現在有時needed_space輸出0

@ECHO off 
setlocal EnableDelayedExpansion 

SET n=0 
SET SOURCE_PATH=M:\Movies 
SET DEST_PATH=E:\Movies 

:: get all folders in dir 
FOR /f "usebackq tokens=*" %%a in (`DIR /b/a:d %SOURCE_PATH%`) do (
    SET /A n+=1  
    SET folder[!n!]=%%a 
) 


:loop 
    :: selecting ranodm number 
    SET /A rand=(n*%random%)/32768+1 

    :: check for space 
    for /F "tokens=3" %%S in ('dir /-c "%SOURCE_PATH%\!folder[%rand%]!\*" ^| findstr /c:"File(s)"') DO set NEEDED_SPACE=%%S 
    FOR /f "tokens=1*delims=:" %%i IN ('fsutil volume diskfree %DEST_PATH%') DO SET FREE_SPACE=%%j 

    ECHO %FREE_SPACE% - %NEEDED_SPACE% 
    IF %NEEDED_SPACE% GTR %FREE_SPACE% GOTO done 

    :: check if file does not exits 
    IF EXIST %DEST_PATH%\!folder[%rand%]! GOTO loop 

    :: copy file 
    ECHO moving %SOURCE_PATH%\!folder[%rand%]! to %DEST_PATH%\!folder[%rand%]! 

    :: again 
    GOTO loop 

:done 
    ECHO Done copying random folders, have fun! 

回答

2

1.-你沒有采取考慮到環境空間疲憊不堪。也許你不能創建你想要的數組。

2:fsutil volume diskfree ...總是在卷返回的空間,不管你指明一個目錄

3.- if命令做數字比較,只有當在操作兩側的所有字符是數字。你的()禁用它,所以(10)小於(3)

+0

要去看看在這些事情 – Kiwi

+0

修正了,但現在只有一些文件輸出0的大小,並有一個文件。 (原始線程中更新的代碼) – Kiwi

+0

放置echo命令以顯示選擇哪個源文件夾並檢查該文件夾中是否包含文件。文件。如果它包含文件夾但不包含文件,則目錄中的空間將爲0,因爲您的dir命令不是遞歸的 –

0

好吧,這是工作到目前爲止。等待盤得到充分的,如果這樣的作品,這應該是足夠了(不是100%完美的檢查,但足夠接近)

代碼:

@ECHO off 
setlocal EnableDelayedExpansion 

SET n=0 
SET SOURCE_PATH=M:\src 
SET DEST_PATH=E:\dest 

:: get all folders in dir 
FOR /f "usebackq tokens=*" %%a in (`DIR /b/a:d %SOURCE_PATH%`) do (
    SET /A n+=1  
    SET folder[!n!]=%%a 
) 

:loop 
    :: selecting ranodm number 
    SET /A rand=(n*%random%)/32768+1 

    :: check for space 
    for /F "tokens=3" %%a in ('dir /-c "%SOURCE_PATH%\!folder[%rand%]!" ^| findstr /c:"File(s)"') do set bytesfree=%%a 
    set bytesfree=%bytesfree:,=% 
    set /a NEEDED_SPACE=%bytesfree:~0,-3% 

    for /f "tokens=3" %%a in ('dir %DEST_PATH%\') do set bytesfree=%%a 
    set bytesfree=%bytesfree:,=% 
    set /a FREE_SPACE=%bytesfree:~0,-3% 


    ECHO %FREE_SPACE% - %NEEDED_SPACE% 
    IF %NEEDED_SPACE% GTR %FREE_SPACE% GOTO done 

    :: check if file does not exits 
    IF EXIST %DEST_PATH%\!folder[%rand%]! GOTO loop 

    :: copy file 
    set src="%SOURCE_PATH%\!folder[%rand%]!\*" 
    set dest= "%DEST_PATH%\!folder[%rand%]!\*" 
    ECHO moving %src% to %dest% 
    xcopy /s /e /i %src% %dest% 

    :: again 
    GOTO loop 

:done 
    ECHO Done copying random folders, have fun!