Как скопировать файлы на компьютеры из списка? - PullRequest
1 голос
/ 19 апреля 2019

Я пытаюсь скопировать файлы из определенного сетевого расположения на множество компьютеров из списка и проверить, существует ли место назначения перед копированием.

Это для обновления программного обеспечения компанией вручную.Он уже протестирован и работает, но нуждается в тонкой настройке.

For /F "usebackq tokens=*" %%a in ("C:\Test\PCList.txt") Do (
    IF Exist "\\%%a\%Target32%" (robocopy "%source32%" "\\%%a\%Target32%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%a_x86_%date:~10,4%.%date:~7,2%.%date:~4,2%.log"
    ) Else IF Exist "\\%%a\%Target64%" (robocopy "%source64%" "\\%%a\%Target64%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%a_x64_%date:~10,4%.%date:~7,2%.%date:~4,2%.log"
        ) Else END
    )

Я ожидаю найти одну цель, но я хочу проверить, существуют ли обе цели, а также скопировать.

1 Ответ

0 голосов
/ 19 апреля 2019

Я предлагаю в качестве кода:

for /F "usebackq delims=" %%a in ("C:\Test\PCList.txt") do (
    if exist "\\%%a\%Target32%" %SystemRoot%\System32\robocopy.exe "%source32%" "\\%%a\%Target32%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%a_x86_%date:~10,4%.%date:~7,2%.%date:~4,2%.log"
    if exist "\\%%a\%Target64%" %SystemRoot%\System32\robocopy.exe "%source64%" "\\%%a\%Target64%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%a_x64_%date:~10,4%.%date:~7,2%.%date:~4,2%.log"
)

Я надеюсь, что переменные окружения Target32 и Target64 определены с обратной косой чертой в конце, чтобы действительно проверить существование каталога и скопировать файлы в source32 и source64 в каталог.

Кстати: ваш код с ненужными ELSE END не приводит ни к одному из двух каталогов, существующих в сообщении об ошибке:

«END» не распознается как внутренняя или внешняя команда,
работающая программа или командный файл.

Я бы также предложил для имени файла журнала %date:~10,4%-%date:~7,2%_%date:~4,2%.log с - вместо . между годом и месяцем и между месяцем и днем. В имени файла должна быть только одна точка, одна для расширения файла, хотя в имени файла может быть несколько точек.

Этот код документирует также, если ни один из двух каталогов не может быть найден на целевом компьютере:

if not "%Target32:~-1%" == "\" set "Target32=%Target32%\"
if not "%Target64:~-1%" == "\" set "Target64=%Target64%\"
for /F "usebackq delims=" %%a in ("C:\Test\PCList.txt") do (
    set "Copied="
    if exist "\\%%a\%Target32%" set "Copied=1" & %SystemRoot%\System32\robocopy.exe "%source32%" "\\%%a\%Target32%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%a_x86_%date:~10,4%-%date:~7,2%-%date:~4,2%.log"
    if exist "\\%%a\%Target64%" set "Copied=1" & %SystemRoot%\System32\robocopy.exe "%source64%" "\\%%a\%Target64%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%a_x64_%date:~10,4%-%date:~7,2%-%date:~4,2%.log"
    if not defined Copied echo Nothing copied to %%a.>"%logdir%\%%a_err_%date:~10,4%-%date:~7,2%-%date:~4,2%.log"
)

Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.

  • for /?
  • if /?
  • robocopy /?
  • set /?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...