かざいむ日誌

IT関係で知ったことなどを記事としてあげていきます。内容に不備や質問などあればぜひコメントをよせてください。

バッチ 遅延環境変数について。その2

バッチファイルで、所定のフォルダ内にある、アクセスファイルをコピーする処理を書きましたが、、、意外なところではまりました。

まずはコード。

echo off
set fromPath=適当に
set toPath=適当に

set batDir=%~dp0

rem variable
set dt=%date%

set FName=log_%dt:~4,2%%dt:~7,2%%dt:~10,4%.txt


xcopy %fromPath% %toPath% /T /Y
setlocal enabledelayedexpansion
cd /d %fromPath%

echo backup start %date% %time% >> %batDir%\%FName%

for /R %%i in (*.accdb) do (
set testStr=%%i
set testStr=!testStr:%fromPath:~2,3%=toPath!
echo from %%i
echo fromPath %fromPath%
echo toPath %toPath%
echo to !testStr!
CALL copy "%%i" "%%testStr%%"
)

echo backup end %date% %time% >> %batDir%\%FName%

 こんな感じで書いて、パスを割り当てたら自分のマシンではうまく行ったのに、試験環境で動かしたらエラー、、、。原因はパスに半角スペースが入っていたからというしょうもない落ちでした。で、このバッチではフォルダ構造をそのままにコピーしようとしていたので、フォルダにスペースが入ることを考慮すると、、、。このやり方じゃだめですね、、、。半角スペースを読んでもいいように、ダブルクォーテーションで囲むと、今度は、遅延環境変数の文字列置換処理で、ダブルクォーテーションが文字列の一部になり、パスの書き換えがうまくいかず、なんかもどかしい感じでうまく行きませんでした。

結局フォルダをまるっとコピーでいいや、という話になったんだけど、なんかくやしい。だれかシンプルな解決策があったら教えてください。

 

qiita.com

 

www.torutk.com

 

環境変数の置換文字列に環境変数を使う。: Windows Script Programming