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ファイルが必要です。むしろ、Rubyスクリプトからのコマンド全体でcmd.exe
を呼び出します。これを行うにはどうすればよいですか?
中間ステップとして、バッチファイルのパスをハードコードしようとしましたが、うまくいきません。
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パスを取得する方法 )がありますが、それは現在のディレクトリのパスを具体的に求めています。
cmd /c for %A in ("C:\Documents and Settings\User\NTUSER.DAT") do @echo %~sA
Filename.txtを8.3に変換するファイル名に置き換えます
dir /x filename.txt
次に、区切り文字として空白を使用して結果を分割する必要があります(正規表現では\ s)。その場合、〜の付いた値は短いファイル名です。ファイル名が短い場合は、〜を含む文字列は見つかりません。