2013-05-25 31 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" 

如果列表中的名称包含通配符,则此解决方案不起作用。