我正在尝试列出不包括扩展名的文件名,
我想要的方式:
File1
File2
File3
目前如何:
File1.txt
File2.txt
File3.txt
我尝试使用
@echo off
dir /A:-D /B
pause
但是它不起作用。我在批处理文件和命令提示符中都尝试过。
我使用正确的命令吗?
答案 0 :(得分:2)
例如:
for %f in ("*.txt") do @echo %~nf
我们使用FOR命令来遍历列表,而不是使用DIR,并将每个发送给ECHO,并且在%f中插入了“〜n”选项,以使扩展名不显示。
一种替代方法是
FORFILES /c "cmd /c echo @fname"
但是,我在每个输出文件名周围都带有引号,这不是您想要的。
for %f in ("*.txt") do @echo %%~nf
是的,这很疯狂,但这是我们为使用批处理语言而不是任何其他语言付出的痛苦代价(全部!)。我就像一个酒鬼,向所有人承诺,并且会杂乱无章,我再也不会写一行Batch代码,然后发现自己又回来了,令人讨厌。
答案 1 :(得分:1)
这可以通过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单行:
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
绕过文件名/完整路径,而没有扩展名。
答案 2 :(得分:0)
要添加到Eureka的答案中,香草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")
的替代方法,如果文件列表包含多个扩展名,则可以排除不同的扩展名 或使用*.*
获取所有文件名称中带有.
。玩弄这个glob,从中得到想要的东西。
答案 3 :(得分:0)
在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
答案 4 :(得分:-1)
dir -Name -File
这适用于 PowerShell