В Batch File перейдите в каталоги, чтобы найти подкаталоги и файлы, и, когда существует цель, переименуйте в _OLD и скопируйте новый файл в цель. - PullRequest
0 голосов
/ 24 июня 2018

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

Что я хочу:

во входном пути, могут быть файлыи / или подкаталоги с файлами.Если они существуют в целевом пути, то файлы в целевом пути должны быть переименованы в file_OLD.extension.

Когда это будет сделано, необходимо скопировать туда файлы из входного пути.

Если файл или подкаталог с файлом не существует, необходимо создать подкаталог и поместить туда файл.

Что у меня есть:

@echo off
setlocal enabledelayedexpansion

set inputpath=P:\Deployment\1.DeployToTST\Template
set targetpath=\\<servername>\Template

for /f %%a in ('dir "%inputpath%"/a-d/b/-p/s^|find /v ""') do (

if exist %targetpath%\%%a (
xcopy "%targetpath%\%%a" "%targetpath%/%%a_OLD" /Y
xcopy /S "%%a" "%targetpath%\%%a" /Y /I /K

) ELSE  (

xcopy /S "%%a" "%targetpath\%%a%" /Y /I /K)

)

Iчувствую, что логика верна (это не ракетостроение в конце концов), однако я не могу заставить ее работать.поскольку %% a, кажется, принимает полный путь к файлу:

P:\Deployment\1.DeployToTST\Template\template1.ctx
P:\Deployment\1.DeployToTST\Template\template1\template1.ctx

Мне действительно нужно, чтобы %% a было:

 template1.ctx
 template1\template1.ctx

расширения файлов различаются, так же как и подкаталогив моем inputpath.

Любая помощь очень приветствуется (кроме советов остановиться с DOS Scritping ;-))

1 Ответ

0 голосов
/ 24 июня 2018

Мне действительно нужно, чтобы %%a было:

template1.ctx
template1\template1.ctx

Используйте следующее:

set _temp=%%a
rem remove P:\Deployment\1.DeployToTST\Template\ from the string
set _result=%_temp:P:\Deployment\1.DeployToTST\Template\=%

Затем используйте %_result% вместо %%a


Дополнительная литература

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