拡張子を除いたファイル名をリストアップしようとしていますが、
どうやって欲しい:
File1
File2
File3
現在の状況:
File1.txt
File2.txt
File3.txt
使ってみた
@echo off
dir /A:-D /B
pause
しかし、それは機能していません。バッチファイルとコマンドプロンプトの両方で試してみました。
正しいコマンドを使用していますか?
たとえば、拡張子が常に.txt
であると仮定します。
for %f in ("*.txt") do @echo %~nf
DIRを使用する代わりに、FORコマンドを使用してリストを調べ、それぞれをECHOに送信し、「〜n」オプションを%fに挿入して、拡張子を表示しません。
代替案は
FORFILES /c "cmd /c echo @fname"
ただし、これを使用すると、各出力ファイル名を引用符で囲みます。
for %%f in ("*.txt") do @echo %%~nf
ディレクトリに名前に拡張子があるサブディレクトリが含まれていない限り、*.txt
を*.*
に一般化できます。
for %f in ("*.*") do @echo %~nf
ファイルに拡張子が付いているが、その前に何もない場合。 .gitignore
、結果の空のECHO
コマンドは、ECHO is on.
などの異常なメッセージを出力します。これを回避するには、ECHO is
を含む行をFIND
コマンドと/V
オプション:
for %f in ("*.*") do @echo %~nf | find /v "ECHO is"
もちろん、ローカル言語によってDOSがECHO is
以外のものを出力する場合、このフィルタリングは機能しません。そして、ファイル名にECHO is
が含まれているファイルを見逃します。
これはおかしなことですが、これは、他の言語ではなく(すべてで)バッチ言語を使用するために支払う苦痛の代償です。私はアルコール依存症のようで、Batchコードの行を二度と書くことは決してないことを約束していて、それから自分が再びそうするために戻ってくるのを大胆に思います。
これは、dir
コマンドとfor
ループで可能です。
@echo off
for /F "delims= eol=" %%A IN ('dir /A-D /B') do echo %%~nA
拡張子なしでフルパスが必要な場合は、以下を試してください。
@echo off
for /F "delims= eol=" %%A IN ('dir /A-D /B') do echo %%~dpnA
Cmd 1行の場合:
for /F "delims= eol=" %A IN ('dir /A-D /B') do echo %~nA
そして、拡張子なしのフルパスの場合は、以下を試してください。
for /F "delims= eol=" %A IN ('dir /A-D /B') do echo %~dpnA
これらの小さなプログラムは、ディレクトリを除くフォルダー内のすべてのファイルをループ処理し、echo
拡張子なしのファイル名/完全パスのみをループします。
ユーレカの答えに追加すると、Vanilla dir
コマンドは、あなたが探しているものを達成できません。
_C:\Users\jacob>dir /?
Displays a list of files and subdirectories in a directory.
DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
[/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]
[drive:][path][filename]
Specifies drive, directory, and/or files to list.
/A Displays files with specified attributes.
attributes D Directories R Read-only files
H Hidden files A Files ready for archiving
S System files I Not content indexed files
L Reparse Points - Prefix meaning not
/B Uses bare format (no heading information or summary).
/C Display the thousand separator in file sizes. This is the
default. Use /-C to disable display of separator.
/D Same as wide but files are list sorted by column.
/L Uses lowercase.
/N New long list format where filenames are on the far right.
/O List by files in sorted order.
sortorder N By name (alphabetic) S By size (smallest first)
E By extension (alphabetic) D By date/time (oldest first)
G Group directories first - Prefix to reverse order
/P Pauses after each screenful of information.
/Q Display the owner of the file.
/R Display alternate data streams of the file.
/S Displays files in specified directory and all subdirectories.
/T Controls which time field displayed or used for sorting
timefield C Creation
A Last Access
W Last Written
/W Uses wide list format.
/X This displays the short names generated for non-8dot3 file
names. The format is that of /N with the short name inserted
before the long name. If no short name is present, blanks are
displayed in its place.
/4 Displays four-digit years
Switches may be preset in the DIRCMD environment variable. Override
preset switches by prefixing any switch with - (hyphen)--for example, /-W.
_
さらに、_("*.txt")
_の使用を提案する代わりに、ファイルリストに複数の拡張子が含まれている場合は、異なる拡張子を除外することもできますまたは _*.*
_を使用して、_.
_の名前。そのグロブで遊んで、必要なものを取り出してください。
PowerShellの方がはるかに簡単になります
(Get-ChildItem -File).BaseName
または
Get-ChildItem | ForEach-Object { $_.BaseName }
Get-ChildItem
エイリアスls
、gci
またはdir
および ForEach-Object
で置き換えることができます= %
で置き換えることができます
したがって、cmdからこれらのいずれかを実行して目的を達成できます
powershell -Com "(ls -File).BaseName"
powershell -Com (ls^ -File).BaseName