пакетный файл для копирования файлов с одного сервера на другой, добавление удаленного каталога к имени файла в процессе - PullRequest
1 голос
/ 15 июня 2011

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

ECHO OFF

SETLOCAL EnableDelayedExpansion

set include=*.log

FOR /L %%i IN (1,2,3) DO (

    net use i: \\my-server%%i\d$\IISLogs

    FOR /R i:\ %%G IN (%include%) DO (

        XCOPY %%G D:\ServerLogsAndBackups\IIS\w%%i\
    )
7z a -t7z D:\ServerLogsAndBackups\IIS\w%%i\files%%i.7z *.log -mx9

net use i: /delete

)

Файл будет получен из чего-то вроде:

я: \ w3svc98435783475 \ ex110430.log

И я хочу скопировать его в D: \ ServerLogsAndBackups \ IIS \ w1 \ w3svc98435783475_ex110430.log. Я не уверен, как получить путь к каталогу на пульте, чтобы вставить в имя файла.

большое спасибо

1 Ответ

1 голос
/ 15 июня 2011

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

ECHO OFF

SETLOCAL EnableDelayedExpansion

set include=*.log

FOR /L %%i IN (1,2,3) DO (

net use i: \\my-server%%i\d$\IISLogs

  FOR /R i:\ %%G IN (%include%) DO (

    FOR /F "tokens=1-2 delims=\" %%H IN ("%%~pnxG") DO (    

      XCOPY %%G D:\ServerLogsAndBackups\IIS\w%%i\%%H_%%I

    )

  )

7z a -t7z D:\ServerLogsAndBackups\IIS\w%%i\files%%i.7z *.log -mx9

net use i: /delete

)

Если файлы имеют заданное количество папок глубиной, вы можете настроить токены по мере необходимости идобавьте дополнительные буквы в конец команды XCOPY (т. е. 5 папок глубиной: tokens = 6 и в команде XCOPY это будет %% H _ %% I _ %% J _ %% K _ %% L _ %% M)

Однако, если существует разная глубина папок, возможно, для этого лучше использовать что-то, кроме пакетного скриптинга.

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