「dir/w」または「dir/b」はファイル名のみを表示することを知っています。 「dir/x」または「dir/X」は8.3形式を示していますが、長い形式のファイル名、日付、サイズなど、他のすべての情報を一緒に示しています。
dir
を呼び出して、ファイル名のみを表示し(日付やサイズは表示しない)、8.3形式で表示することはできますか?
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
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
これを1時間遊んだ後、私は次のことを思いつきました:
from 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%"
すべてのサブディレクトリにファイルをリストするには、これを試してください:
for /d /r %i in (*.*) do dir "%i" /B > %i/test.txt