Строка конвейера с папками в переменной для findstr - копирование и переименование файлов - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь передать строку, содержащую пути к папкам, на findstr для поиска определенной части в именах данных папок - или, по крайней мере, это то, что я планирую сделать.

У меня есть исходная папка с файлами, которые нужно скопировать в несколько подпапок, и после этого один из скопированных файлов должен быть переименован в соответствии с целевой папкой. Если уже есть файлы с такими же именами, их необходимо перезаписать. Я пытаюсь добиться этого через .bat -файл, используя следующие команды в моем коде:

pushd ..\..\destination_folder\

FOR /F "delims=" %%i in ('dir /AD /S /B^| findstr /I "._Modul_X$"') do copy ..\xxx\yyy\ressources\*.* %%i
& ren %%i\xxxx_Modul_X.BAT_TEMPLATE" "%%i_Modul_X.BAT_TEMPLATE  

Кажется, что copy -часть работает, rename -часть не работает, и когда она доходит до перезаписи одного файла, который должен быть переименован после его копирования (конфликт имен!), я не знаю, как это сделать (IF EXIST & DEL?).

1 Ответ

0 голосов
/ 09 мая 2020

Если я понимаю процесс, который вы пытаетесь выполнить, то следующее должно выполняться так, как вам нужно, при условии, что я предполагаю, что xxxx представляет собой последовательность ровно из четырех цифр (имена каталогов) и символов (файл имена) :

@Echo Off
SetLocal EnableExtensions

PushD "..\..\destination_folder" 2>NUL || GoTo :EOF
If Not Exist "..\xxx\yyy\resources\*.*" GoTo :EOF

For /F "Delims=" %%G In (
    'Dir /B /S /A:D "????_Modul_X" 2^>NUL ^|%__AppDir__%findstr.exe^
     /I /R "\\[0123456789][0123456789][0123456789][0123456789]_Modul_X"'
) Do (
    For /F "Delims=" %%H In (
        '%__AppDir__%where.exe /F "%%G":"????_Modul_X.BAT_TEMPLATE" 2^>NUL'
    ) Do Del /A /F %%H
    Copy /Y "..\xxx\yyy\resources\*.*" "%%G" 1>NUL
    For /F "Delims=" %%I In (
        '%__AppDir__%where.exe /F "%%G":"????_Modul_X.BAT_TEMPLATE" 2^>NUL'
    ) Do If /I Not "%%~nxI" == "%%~nxG%%~xI" Ren %%I "%%~nxG%%~xI"
)

Обратите внимание, что вам, вероятно, потребуется изменить оба экземпляра xxx\yyy\resources, (строки 5 и 14) , поскольку никто действительно использует такие имена, обращая особое внимание на написание, я использовал resources выше, а не ressources.

...