2003-07-01から1ヶ月間の記事一覧

【外伝】ページブラウザ(PGBROW32.EXE)

CMD

昨日の記事で、" " で囲むとおかしくなるケースで1つ思い出した。 ページブラウザというテキストビューアーがある。Win3.1のころからあるが、JIS/SJIS/EUCJPの3種の文字コードを認識・表示し、CR/NL/CRLFの3種の改行コードを自由に変換できる機能を持って…

【続】ディレクトリかどうかの判断

CMD

if exist %A%\NUL を使ったディレクトリ判断について、 昨日、空白を含んでいるとだめだと書いたが、それは正しくないようだ。 if exist "C:\Program Files\NUL"偽 if exist C:\Program Files\NUL構文不正 if exist "C:\PROGRA~1\NUL"偽 if exist C:\PROGRA~…

ディレクトリかどうかの判断

CMD

変数Aに何らかのパス名が入っているとして、それがディレクトリかファイルかの判断には、 if exist %A%\NUL echo ディレクトリ を愛用していた。しかし、Aが空白を含んでいるときは、これが正しくない。%A%\NULが存在しないのだ。 バグではないか?(未調査)…

【続】変数中のリダイレクト文字

CMD

変数の遅延展開が、構文解析後に起こることを考えると、7/20メモの「変数中のリダイレクト文字」の振る舞いについても対処が出来そうである。 @echo off setlocal enabledelayedexpansion set /p A=A: echo (!A!) というスクリプトを作り、Aに色々な文字、 |…

【続】環境変数のFOR制御変数へのセット

CMD

昨日書いた for /f "delims=" %%A in ("%A%") do だが、環境変数Aに " が奇数個含まれるとおかしくなるので駄目。 for /f "delims=" %%A in ("aaa"bbb") do のようになって構文解析が失敗するため。遅延展開を使って、 for /f "delims=" %%A in ("!A!") do …

環境変数のFOR制御変数へのセット

CMD

環境変数の値をそのままFOR制御変数にセットしたい場合、 for /f "delims=" %%A in ("%A%") do for /f "tokens=*" %%A in ("%A%") do 前者ではそのままセットされる。 後者では、先頭の空白が除去されてセットされる(途中や最後の空白は残る)。環境変数に比…

setlocalしたスクリプトから外部の環境変数をセット

CMD

setlocalすると、スクリプト実行後の環境変数にセットするには、endlocalのあとでセットするしかない。 しかしセットしたい値はローカル変数に入っているので、endlocalの後では参照できない。 endlocalの後までローカル変数を持ち越す手段を講じる必要があ…

引数の shift

CMD

shift 命令を実行したら $* にも反映されてほしいが、しない。 バグ?

%PATH%の要素分解

CMD

%PATH% を;で切り離してそれぞれの要素を別々に処理したいとき、 for %%I in (%PATH%) do echo %%I で、おおむね良いが、「Program Files」のように空白が入っているとそれが区切りになって うまく処理されない。PATHに追加するときに、「PROGRA~1」のよう…

標準入力からの読み取り

CMD

set /p を使えば、sh の read 相当のことが出来るのではないかと思い、 @echo off setlocal :loop set /p X= if not %ERRORLEVEL% == 0 goto :eof echo "%X%" goto loop と書いてみる(zz.bat)。 set /p で ^Z を入れると ERRORLEVEL が 1 になることは別途確…

変数中のリダイレクト文字

CMD

変数Aに「BBB > CCC」が入っていた場合、 echo %A% で、「BBB > CCC」が表示されると期待したが、 echo BBB > CCC とみなされる。つまり、CCCという名のファイルにBBBが書き込まれる。なお、変数Aへの「BBB > CCC」をセットしようと、 set A=BBB > CCC とす…

拡張子関連付けで起動時のリダイレクト

Win

\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer InheritConsoleHandles 新設DW =1 スクリプトを拡張子関連付けでコマンドラインから起動した時のSTDIN/STDOUTリダイレクトを可能にする。 W2KSP4、XPSP1以降で有効(Windo…