バッチ ファイル内の次のコマンドは、期待どおり/期待どおりに機能しません。
echo %~nxs1
ここに私が取得しようとしているもののサンプル表示があります:
C:\>type test.bat
@dir /b %1
@echo %~nxs1
C:\>test "C:\Documents and Settings\All Users\ntuser.dat"
ntuser.dat
NTUSER.DAT
C:\>test "C:\Documents and Settings\All Users\ntuser.data"
ntuser.data
NTUSER~1.DA~
C:\>test "C:\Documents and Settings\All Users\ntuser.dat.baz"
ntuser.dat.baz
NTUSER~1.BAZ
C:\>test "C:\Documents and Settings\All Users\foo.bar.baz"
File Not Found
foo.bar.baz (or FOO~1.BAZ or whatever, doesn’t really matter since
file does not exist, though latter would be nice)
代わりに、次のようなものが得られます (割り当てられた短いファイル名によって異なります)。
C:\>type test.bat
@dir /b %1
@echo %~nxs1
C:\>test "C:\Documents and Settings\All Users\ntuser.dat"
ntuser.dat
s\ntuser.dat
C:\>test "C:\Documents and Settings\All Users\ntuser.data"
ntuser.data
s\ntuser.data
C:\>test "C:\Documents and Settings\All Users\ntuser.dat.baz"
ntuser.dat.baz
z
C:\>test "C:\Documents and Settings\All Users\foo.bar.baz"
File Not Found
s\foo.bar.baz
基本的に、ファイル名をBATファイルに渡し、スクリプトにそれを短いファイル名として取得 (表示など) させる必要がありますが、ファイル名と拡張子のみで、ドライブやパスはありません。
FORのヘルプ情報では%~fsIが例として示されていますが、これにはファイルだけでなくパス全体が短いファイル名として含まれています。パス全体を取得せずに%~から S パラメータを組み合わせる方法を知っている人はいますか?
どうもありがとう。
アップデート
別の言語での解決策を探しているわけではありません。BAT コマンドが機能する必要があります。
他の人でもうまくいくようですので、何らかの代替構成の問題であるかどうかを確認しています. 現在、コマンド プロセッサ拡張機能が原因かどうかをテストしています。
拡張機能が無効になっていると (明らかに) まったく機能しないので、次のサービス パックで修正されたバグであるという仮説を立てます (テストしたシステムは XP SP1 です)。今日は SP2 と SP3 をテストしています…</p>