Как развернуть две локальные переменные внутри цикла 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!=!!

Но ни один не будет работать.

Я делаю что-то не так в этом, или есть элегантный способ (следовательно, без использования временного файла), чтобы сделать это?

Благодарю.

Ответы на вопрос(3)

Ваш ответ на вопрос