Как развернуть две локальные переменные внутри цикла for в командном файле
Я пытаюсь написать скрипт, который должен читать из списка файлов и копировать каждый элемент в новое место, следуя той же структуре.
Первоначально это было предназначено для копирования файлов, которые были изменены в пределах диапазона коммитов Git, но так как я нашел более простой способ (сначала «сценарий» на C #, затемэтот), сейчас я делаю это только в интересах обучения.
Это примерfile_list.txt:
config.php
repository\file picker.php
user\edit.php
Это мое.летучая мышь файл до сих пор:
@echo off
setlocal enabledelayedexpansion
set "source=input dir"
set "target=output dir"
for /f "tokens=* usebackq" %%A in ("file_list.txt") do (
set "FILE=%%A"
set "dest_file_full=%target%\!FILE:%source%=!"
set "dest_file_filename=%%~nxA"
::set dest_file_dir=(!dest_file_full - !dest_file_filename)
if not exist "!dest_file_dir!" (
md "!dest_file_dir!"
)
set "source_file_full=%source%\!FILE:%source%=!"
copy "!source_file_full!" "!dest_file_dir!"
)
pause
Обратите внимание на закомментированную строкуset dest_file_dir=(!dest_file_full - !dest_file_filename)
, Это псевдокод. Мне нужно использовать подстановку переменных здесь, ноcmd.exe не будет расширять две локальные переменные за один шаг.
Я уже пробовал трубу ...
echo set dest_file_dir=^!dest_file_full:!dest_file_filename!=^! | cmd
или используяcall
:
call set dest_file_dir=!!dest_file_full:!dest_file_filename!=!!
Но ни один не будет работать.
Я делаю что-то не так в этом, или есть элегантный способ (следовательно, без использования временного файла), чтобы сделать это?
Благодарю.