Windowsコマンドラインdirコマンド:ファイル名のみを8.3形式で表示するには?


11

「dir / w」または「dir / b」はファイル名のみを表示することを知っています。「dir / x」または「dir / X」は8.3形式を示していますが、長い形式のファイル名、日付、サイズなど、他のすべての情報を一緒に示しています。

を呼び出しdirて、ファイル名のみを表示し(日付やサイズは表示せず)、8.3形式で表示することはできますか?

回答:


10
for /R %A in (*.*) do @echo %~nsA %~nA

サブディレクトリなし:

for %A in (*.*) do @echo %~nsA %~nA

隠しファイルを追加:

for /F "tokens=*" %A in ('dir /B/A:-/S *') do @echo %~nsA %~nA

サブディレクトリなし:

for /F "tokens=*" %A in ('dir /B/A:- *') do @echo %~nsA %~nA

そのことを証明する出力を含めることができます
barlop

最初のコマンドの結果をテキストファイルに出力するにはどうすればよいですか?次のエラーが表示されます。「要求された操作は、ユーザーがマップしたセクションが開いているファイルでは実行できません。」
bdb484

3

8.3の名前だけを表示したい場合、「dir / -n」を使用すると、各行の先頭に8.3の名前が表示されます。注:ファイル名から拡張子をピリオドではなくスペースで区切ります。

C:\Users\User>dir /-n
 Volume in drive C has no label.
 Volume Serial Number is 5C60-1B61

 Directory of C:\Users\User

.             <DIR>             01/28/2015  11:26 PM
..            <DIR>             01/28/2015  11:26 PM
Contacts      <DIR>             12/27/2014  04:46 PM
Desktop       <DIR>             01/25/2015  05:06 PM
DOCUME~1      <DIR>             01/27/2015  10:20 PM
DOWNLO~1      <DIR>             01/27/2015  10:10 PM
FAVORI~1      <DIR>             12/27/2014  04:46 PM
GOOGLE~1      <DIR>             01/28/2015  02:08 AM
Links         <DIR>             01/25/2015  05:06 PM
Music         <DIR>             12/27/2014  04:46 PM
Pictures      <DIR>             12/27/2014  04:46 PM
SAVEDG~1      <DIR>             12/27/2014  04:46 PM
Searches      <DIR>             12/27/2014  04:46 PM
TESTIN~1 TXT                  8 01/28/2015  10:32 PM
TESTIN~2 BAT                175 01/28/2015  11:26 PM
TESTIN~1 BAT                164 01/28/2015  11:26 PM
UNIGIN~1      <DIR>             10/28/2014  07:01 PM
Videos        <DIR>             12/27/2014  04:46 PM
               3 File(s)            347 bytes
              16 Dir(s)  3,896,034,717,696 bytes free

ただし、バッチファイルのforループ内で「dir / -n」を使用して、最初の12文字の部分文字列抽出し、各行の残りの部分を取り除くことができます。例えば:

@echo off
setlocal EnableDelayedExpansion

for /f "skip=7 tokens=*" %%i in ('dir /-n ^| find /v "File(s)" ^| find /v "Dir(s)"') do (
   set x=%%i
   echo !x:~0,12!
)

"skip = 7"は、ファイル名でもディレクトリ名でもない最初の7行をスキップし、 "dir / -n"の出力は、 "dir / -n"によって生成された最後の2行を削除する2つのfindコマンドを介してパイプ処理されます。 "(パイプ記号「|」は「^」で「エスケープ」する必要があります。部分文字列抽出はバッチファイルのforループで発生するため、「setlocal EnableDelayedExpansion」が必要であり、「!」を"%"ではなく変数x。上記の例の場合、バッチファイルの実行による次の出力が表示されます。

C:\Users\User>testing456
Contacts
Desktop
DOCUME~1
DOWNLO~1
FAVORI~1
GOOGLE~1
Links
Music
Pictures
SAVEDG~1
Searches
TESTIN~1 TXT
TESTIN~2 BAT
TESTIN~1 BAT
UNIGIN~1
Videos

Nitpick:1つ以上のスペース。という名前のファイルを作成してabc.txt、実際の動作を確認してください。次に、それを楽しむために、という名前のファイルを作成しますabc.docx
CVn、2015年

0

これを1時間遊んだ後、私は次のことを思いつきました:

dosプロンプトから:

for /F "tokens=*" %A in ('dir /B/A:-/S c:\Windows') do (@echo %~sA>> "%temp%\file_list_8dot3.txt")

.BATまたは.CMDファイルから:

for /F "tokens=*" %%A in ('dir /B/A:-/S c:\Windows') do (@echo %%~sA>> "%temp%\file_list_8dot3.txt")

注: このスクリプトは長いファイル名でも問題がありますが、続行して8dot3テキストファイルを作成し、他のバッチファイルにポンプで送ることができます。

以下は、テスト全体の.Batファイルです。

@echo off
cls

set ll=%temp%\file_list_8dot3.txt

if exist "%ll%" del "%ll%"
for /F "tokens=*" %%A in ('dir /B/A:-/S %temp%') do (@echo %%~sA>> "%ll%")

start /wait notepad "%ll%"

if exist "%ll%" del "%ll%"

0

すべてのサブディレクトリにファイルをリストするには、これを試してください:

for /d /r %i in (*.*) do dir "%i" /B > %i/test.txt

 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.