diredからPDF表示
! s [RET] の3キーだから、まあいいとしよう。空白を含むファイルはダメ。
次のバッチファイルを ~/bin/s.bat とかにする。
@echo off echo This is %0 echo Received %1 set arg1=%1 set arg=%arg1:"=% echo !! Starting %arg% !! start %arg%
要点は:
- Windowsのstartは引用符を解釈できない。
- したがって、空白入りファイルはダメ。
- 引用符の削除は文字列置換機能を使う。(そんなんがあったのだ。)
- 置換機能は %1 など引数参照には使えない。
[追記]クォートと空白の問題は回避できる。
@echo off echo This is %0 echo Received %1 set arg1=%1 rem set arg=%arg1:"=% set arg=%arg1% echo !! Starting %arg% !! start "" %arg%
だが、日本語のファイル名はダメ。EmacsとOSでエンコーディングが違うようだ。文字列のコード変換を噛ませばいいが、バッチファイルで $(...) ってどうやる?[/追記]
[さらに追記]日本語ファイル名もなんとかなった。
@echo off setlocal rem echo This is %0 rem echo Received %1 set arg=%1 echo %arg% > %TEMP%\%USERNAME%_s_bat.tmp for /F %%x in ('iconv -f utf-8 -t sjis %TEMP%\%USERNAME%_s_bat.tmp') do ( echo Starting %%x start "" %%x ) endlocal
iconvを使って変換。中間ファイルを使わずに、'echo %arg% | iconv -f utf-8 -t sjis' とは出来ない。パイプ記号が構文エラーとなる。[/さらに追記]
[さらにさらに追記]日本語ファイル名もなんとかなった。
少し短く。
@echo off rem echo This is %0 rem echo Received %1 echo %1> %TEMP%\%USERNAME%_s_bat.tmp for /F %%x in ('iconv -f utf-8 -t sjis %TEMP%\%USERNAME%_s_bat.tmp') do ( echo Starting %%x start "" %%x )
ほとんどうまくいくが、echo %1 の段階で、文字列が壊れることがある。そうすると全体も失敗。理由は不明。
[/さらにさらに追記]
[続続続 追記]2016-02 どうもうまくない。漢字ファイル名はダメだし、空白もダメで、根本的に考え直す必要がある。が、やってない。[/続続続 追記]