31

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パスを取得する方法)がありますが、具体的には現在のディレクトリのパスを要求しています。

4

3 に答える 3

45
cmd /c for %A in ("C:\Documents and Settings\User\NTUSER.DAT") do @echo %~sA
于 2012-04-19T12:08:20.500 に答える
6

filename.txt を、8.3 に変換するファイル名に置き換えます。

dir /x filename.txt

次に、区切り文字として空白を使用して結果を分割する必要があります (正規表現では \s)。~ の付いた値は、短いファイル名です。ファイル名が最初から短い場合、~ を含む文字列は見つかりません。

于 2012-04-19T12:03:23.467 に答える