私はIT部門用の小さなインベントリスクリプトを作成しています。私はしばらく時間を節約しようとしていますが、ちょっとした不具合に遭遇しました。実行時にバッチ変数が展開されない
私の目標は、現在の場所を一時的なローカルファイル(このバッチファイルはフラッシュドライブ上で実行される)に格納することです。そのため、あるコンピュータから次のコンピュータに移動するときには、正確ではありません。基本的に、ユニット1、ビルA、ルーム3で始めると、正しいものが何であるかを確認し、そうでないものを変更するだけです。
おそらくロケーション確認コードは、ここで何が起こっているのかをよりよく知ることができます。
@echo off
setlocal
setlocal EnableDelayedExpansion
if not exist location.tmp (
echo , , > location.tmp
)
for /f "tokens=1-3 delims=," %%i in (location.tmp) do (
if not "%%i" == " " (
set unit=%%i
)
if not "%%j" == " " (
set building=%%j
)
if not "%%k" == " " (
set room=%%k
)
)
for %%i in (unit,building,room) do (
call :SUB_GET %%i
)
echo !unit!,!building!,!room!> location.tmp
endlocal
exit /b 0
:SUB_GET
if not defined %1 (
set /p %1=What %1?
goto :EOF
)
set /p new%1=What %1? (default is !%1!)
if not "!new%1!" == "" (
set %1=!new%1!
)
デフォルトを維持しようとする場合を除き、すべて動作します。値が正しければ(例えば、「どの部屋(デフォルトは403)」と入力して403を押してください)
のように、入力を押すだけで問題はありません。コードは新しい環境変数(入力)をチェックして空であるかどうかを確認し、古い変数に新しい変数(空文字列)の値を割り当てます。
デフォルトの(1、A、4のような)既存のlocation.tmpを作成し、Enterキーを押してそれぞれを確認すると、バッチステートメントecho !unit!,!building!,!room!>location.tmp
が実行されますが、location.tmpは変更されません。
ここで何が起こっているのですか?
ああ、それは物事を簡素化します。私は奇妙で不必要に複雑なバッチスクリプティングが本当にどれほど大事なのかを決して克服することはできませんが、いつか私はいつもそれを叫びたくないほど知っています。ありがとう! – Tyg13