2013-05-25 4 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 Source1»

Уилла вещь для лучшего решения

Если вы уже .BAT со всеми sources-> адресатам, можно попробовать также:

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

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

) 
:end_for 

. Вы также можете проверить robocopy с /R:0. Я думаю, что 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" 

Это решение не работает, если имена в списке содержат wild-cards.