iTunes12 のサイレントインストール(アップデート)
通常はADからmsiファイルでアプリケーションの配信をかけるのですが、
EXEファイルでしか提供されないインストーラもあって困っています。
その中で、今回はiTunesの話です。
2015年12月29日火曜日
2015年12月26日土曜日
不思議な 遅延環境変数 バッチファイル
不思議な %パーセント記号 と!エクスクラメーション(感嘆符)
遅延環境変数の挙動をECHOを使って確認していたところ。
まったく解決できなかったこと。
@echo off
set par=%%%%
echo %par%i ; %%%%i
setlocal enabledelayedexpansion
set num=0
for /l %%i in (1,1,3) do (
set /a num+=%%i
echo !par!i = %%i ; %par%i = %%i ; %%%%i = %%i ; %%num%% = %num% ; !num! = !num!
)
echo %par%i ; %%%%i
Endlocal
実行結果
%%i ; %%i
%%i = 1 ; %1 = 1 ; %1 = 1 ; %num% = 0 ; !num! = 1
%%i = 2 ; %2 = 2 ; %2 = 2 ; %num% = 0 ; !num! = 3
%%i = 3 ; %3 = 3 ; %3 = 3 ; %num% = 0 ; !num! = 6
%%i ; %%i
疑問1.「%」自体をECHOしたい場合は %% ってしますよね。
カッコ内が実行前に 1行に解釈される事までは理解したはずだった。
カッコ前、後でのECHO(予定通りの出力結果)
echo %par%i ; %%%%i
結果 → %%i ; %%i
カッコ内でのECHO
echo %par%i ; %%%%i
結果 → %1 ; %1
最初の行解釈で
echo !par!i = %i ; %%i = %i ; %%i = %i ; %num% = 0 ; !num! = !num!
に変換されて
途中の行解釈では
echo !par!i = 1 ; %1 = 1 ; %1 = 1 ; %num% = 0 ; !num! = !num!
かと言って
「%%%%%%%%i」 と設定しても 「%%%1」に変換される始末。
結果としては。カッコ内では遅延環境変数になる 「!」を使えば思惑通りの結果が出ました。
疑問2.じゃあ「!」はどうやって出力するのか?
・「!!」では意味が無い。
・変数に突っ込んでも表示がされない。
1時間ほど悩んであきらめました。苦肉の策が全角の「!」
setlocal disabledelayedexpansion
として、
遅延環境変数を無効にすれば表示はされますが、そもそもの意味がなくなりますからね。
遅延環境変数の挙動をECHOを使って確認していたところ。
まったく解決できなかったこと。
@echo off
set par=%%%%
echo %par%i ; %%%%i
setlocal enabledelayedexpansion
set num=0
for /l %%i in (1,1,3) do (
set /a num+=%%i
echo !par!i = %%i ; %par%i = %%i ; %%%%i = %%i ; %%num%% = %num% ; !num! = !num!
)
echo %par%i ; %%%%i
Endlocal
実行結果
%%i ; %%i
%%i = 1 ; %1 = 1 ; %1 = 1 ; %num% = 0 ; !num! = 1
%%i = 2 ; %2 = 2 ; %2 = 2 ; %num% = 0 ; !num! = 3
%%i = 3 ; %3 = 3 ; %3 = 3 ; %num% = 0 ; !num! = 6
%%i ; %%i
疑問1.「%」自体をECHOしたい場合は %% ってしますよね。
カッコ内が実行前に 1行に解釈される事までは理解したはずだった。
カッコ前、後でのECHO(予定通りの出力結果)
echo %par%i ; %%%%i
結果 → %%i ; %%i
カッコ内でのECHO
echo %par%i ; %%%%i
結果 → %1 ; %1
最初の行解釈で
echo !par!i = %i ; %%i = %i ; %%i = %i ; %num% = 0 ; !num! = !num!
に変換されて
途中の行解釈では
echo !par!i = 1 ; %1 = 1 ; %1 = 1 ; %num% = 0 ; !num! = !num!
かと言って
「%%%%%%%%i」 と設定しても 「%%%1」に変換される始末。
結果としては。カッコ内では遅延環境変数になる 「!」を使えば思惑通りの結果が出ました。
疑問2.じゃあ「!」はどうやって出力するのか?
・「!!」では意味が無い。
・変数に突っ込んでも表示がされない。
1時間ほど悩んであきらめました。苦肉の策が全角の「!」
setlocal disabledelayedexpansion
として、
遅延環境変数を無効にすれば表示はされますが、そもそもの意味がなくなりますからね。
登録:
投稿 (Atom)