Windowsで長いファイル名を短いファイル名(8.3)に変換しようとしています。
コマンドライン引数を持つバッチファイルは、意図したとおりに機能します。
short.bat:
@echo OFF
echo %~s1
呼び出しshort.bat C:\Documents and Settings\User\NTUSER.DAT
は戻りますC:\DOCUM~1\USER\NTUSER.DAT
ただし、このために余分な.batファイルを用意するのは好きではありません。私はむしろcmd.exe
、rubyスクリプトからコマンド全体を呼び出したいと思います。これどうやってするの?
中間ステップとして、バッチファイルにパスをハードコーディングしようとしましたが、機能しません。
short1.bat:
@echo OFF
SET filename="C:\Documents and Settings\User\NTUSER.DAT"
echo %filename%
echo %~sfilename%
echo %filename%
動作しecho %~sfilename%
ますが、次のエラーが発生します。
The following usage of the path operator in batch-parameter
substitution is invalid: %~sfilename%
For valid formats type CALL /? or FOR /?
short1.batが機能する場合、これをで呼び出すことができるワンライナーに変換するにはどうすればよいcmd.exe \c ...
ですか?
別の質問(Windowsパスの代わりにDOSパスを取得する方法)がありますが、具体的には現在のディレクトリのパスを要求しています。