2013-05-25 92 views
2

我有一個批處理腳本,可將來自不同源的50個文件複製到不同的目標。 現在,我有50行:設計批量腳本,用於執行大量副本

xcopy "source" "dest" /y /v 

現在,我希望腳本結束時,如果一個副本已經失敗。問題是我不想要100行:

xcopy "source" "dest" /y /v 
if not errorlevel 0 goto ERR 

在批處理腳本中是否有像「函數」一樣的行爲?

謝謝。

+0

是批次是否有使用功能的規定 – Arun

回答

2

這應該與

d:\source\path1\*.*|n:\target\path\ 
d:\source\path2\*.*|n:\target\path3\ 
etc 

更改的文件格式的工作XCOPY開關,以滿足您的應用程序。代碼很大程度上取自npomaka。

未經測試。

@echo off 
for /f "tokens=1,2 delims=|" %%D in (file.txt) do (
    xcopy "%%~D" "%%~E" s/h/e/k/f/c || goto :end_for 
) 
:end_for 
+0

謝謝你們兩位。我接受這個答案,因爲那是我將如何做到的。 – Ofer

1
for %%S in ("destination1|source1" 
      "destination2|source2" 
      "and|so on") do (
    for /f "tokens=1,2 delims=|" %%D in ("%%~S") do (
     xcopy "%%~D" "%%~E" /y /v || goto :end_for 
) 
) 
:end_for 

但是,你需要在第一FOR設置與源目的地一個這樣的映射|(?你已經擁有了所有xopy operations蝙蝠)「DESTINATION1來源1」

意志的事情更好的解決方案

如果你已經是一個.BAT所有來源 - >目的地,你也可以嘗試:

for /f usebackq^ tokens^=1^,3^ delims^=^" %%S in ("your.bat") do (

    xcopy "%%~S" "%%~T" /y /v || goto :end_for 

) 
:end_for 

.您也可以用/R:0查詢robocopy。我認爲robocopy在你的情況下會更有用。

爲什麼你有50行?在可以用作掩碼的文件中是否有一些常見的東西?

+0

目標也是如此。需要兩個文件或者可以使用一個帶有「source | target」格式的文件。 – foxidrive

+0

我有3個不同的「目標文件夾」文件夾和50個不同的「源文件」路徑。 – Ofer

+0

ok ...編輯... – npocmaka

1

下面的批處理文件提供了這兩個功能:

  • 它使文件名列表在同一個批處理文件,這樣就不需要額外的文件。
  • 名稱列表不需要任何奇怪的字符,只是與原始文件名稱相同。

@echo off 
setlocal EnableDelayedExpansion 
for /F "delims=:" %%a in ('findstr /N "^:FileList" "%~F0"') do set n=%%a 
for /F "delims=" %%a in ('more +%n% "%~F0"') do (
    set source= 
    for %%b in (%%a) do (
     if not defined source (set source=%%b) else set dest=%%b 
    ) 
    xcopy !source! !dest! /y /v || goto end_for 
) 
:end_for 
goto :EOF 

:FileList 
source dest 
"\long\path\source number two" "\second dest folder" 

如果列表中的名稱包含通配符,則此解決方案不起作用。