ファイルのリストから読み込んで各項目を同じ場所に新しい場所にコピーするスクリプトを作成しようとしています。バッチファイル内のforループ内で2つのローカル変数を展開する方法
これはGitコミットの範囲内で変更されたファイルをコピーすることを意図していましたが、もっと簡単な方法(最初はC# "スクリプト"、次にthis)を見つけたので、学習の関心。
config.php
repository\file picker.php
user\edit.php
これは、これまでのところ、私のの.batファイルです::コメント行set dest_file_dir=(!dest_file_full - !dest_file_filename)
@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
お知らせ
これはfile_list.txtの一例です。これは擬似コードです。私はここで変数置換を使用する必要がありますが、cmd.exeは、1つのステップで2つのローカル変数を展開しません。
call set dest_file_dir=!!dest_file_full:!dest_file_filename!=!!
しかし、どちらも動作します:
echo set dest_file_dir=^!dest_file_full:!dest_file_filename!=^! | cmd
またはcall
を使用して、私はすでにパイプを試してみました
...。
私はこれに何か間違っているのですか、これを達成するためにエレガントな方法(したがって一時ファイルを使用しないで)がありますか?
ありがとうございました。