2012-12-27 60 views
0

我需要批處理腳本將文件從特定目錄的隨機子文件夾複製到目標目錄。如何將文件從隨機文件夾批量複製到目標文件夾?

例如,會有一些自己的子目錄中的文件,例如

.../source/a/file.txt 
.../source/b/file.txt 

因此,有許多這樣的文件,我想隨機選擇其中之一,並把它複製到新目錄

.../destination/file.txt 

所以在目的地的file.txt的是剛剛被覆蓋與具有相同名稱但不同的內容的其他文件。

我是新來的批處理腳本,我不能完全弄清楚如何從隨機子文件夾中選擇每個文件。我也希望它每30秒重複一次,直到我終止腳本,但我認爲應該很容易,只要製作第二個腳本,每隔30秒就會調用一次.bat文件。

謝謝!

回答

0

這可以做你的要求。只需設置源目錄,目標目錄和文件名過濾器即可。

@echo off 
setlocal EnableExtensions EnableDelayedExpansion 

pushd "...\source\" 

:: Enumerate Files. Method 1 
set "xCount=0" 
for /r %%A in (file.txt) do if exist "%%~A" set /a "xCount+=1" 
echo %xCount% 

:: Select a Random File. 
set /a "xIndex=%Random% %% %xCount%" 
echo %xIndex% 

:: Find an Copy that File. Method 1 
set "xTally=0" 
for /r %%A in (file.txt) do if exist "%%~A" (
    if "!xTally!" EQU "%xIndex%" (
     xcopy "%%~fA" "...\destination\file.txt" /Y 
     goto End 
    ) 
    set /a "xTally+=1" 
) 

:End 
popd 
endlocal 
pause 

類型xcopy /?看到它的所有選項。

下面是文件枚舉的一些備用循環方法。

:: Enumerate Files. Method 2 
set "xCount=0" 
for /f %%A in ('dir *.txt /a:-d /s ^| find "File(s)"') do set "xCount=%%~A" 
echo %xCount% 

:: Find an Copy that File. Method 2 
set "xTally=0" 
for /f "delims=" %%A in ('dir *.txt /a:-d /b /s') do (
    if "!xTally!" EQU "%xIndex%" (
     xcopy "%%~fA" "...\destination\file.txt" /Y 
     goto End 
    ) 
    set /a "xTally+=1" 
) 

享受:)

0
@echo off 
setlocal EnableDelayedExpansion 
rem Enter into the directory that contain the folders 
pushd \Fullpath\source 
rem Create an array with all folders 
set i=0 
for /D %%a in (*) do (
    set /A i+=1 
    set folder[!i!]=%%a 
) 
rem Randomly select one folder 
set /A index=(%random%*i)/32768 + 1 
rem Copy the desired file 
copy "!folder[%index%]!\file.txt" "\Fullpath\destination" /Y 
rem And return to original directory 
popd 
0

批處理腳本的功能是

  1. 它複製從源頭上具有相似結構的目標文件夾中的所有文件(甚至保留空文件夾)。
  2. 可以在歸檔文件夾(源)中保留N天的最近文件剩餘文件將被移動到備份文件夾(目的地)。
  3. 可以安排N天到N年。
  4. 可用於任何源到目標文件夾的備份。
  5. 源文件夾可以隨時添加N個文件夾並刪除文件夾或文件,但目標文件夾始終添加該文件夾並永不刪除任何文件夾或文件。

  1. @迴響
  2. 集 「sourcefolder = E:\接口」
  3. 集 「destinationfolder = E:\ BackupInterface」

  4. 如果存在%sourcefolder%(

  5. For/F %% * In('Dir/b/aD「%sourcefolder%」2 ^> nul')do(If Not Exist「%destinationfolder%\ %% 「(RD/S/Q」 %destinationfolder%\ %%「)
  6. XCOPY/E/V/I/Y/Q 「%sourcefolder%\ %% 」 「%destinationfolder%\ %%
  7. FORFILES/p 「%sourcefolder%\ %% *」/ S/d -30/C 「CMD/C德爾/ Q/S @file」)

  8. )否則(echo.Source夾能不被發現)

  9. :批次結束

  10. 回聲。 & echo.finished!

相關問題