如何使用dir命令仅显示不带扩展名的文件名

时间:2019-03-02 21:05:15

标签: windows batch-file command-prompt

我正在尝试列出不包括扩展名的文件名,

我想要的方式:

File1
File2
File3

目前如何:

File1.txt
File2.txt
File3.txt

我尝试使用

@echo off
dir /A:-D /B
pause

但是它不起作用。我在批处理文件和命令提示符中都尝试过。

我使用正确的命令吗?

5 个答案:

答案 0 :(得分:2)

使用FOR和ECHO实现此目的

例如:

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可以替换为别名lsgcidir,而ForEach-Object可以替换为%

因此,从cmd中,您可以运行其中任何一个来达到目的

powershell -Com "(ls -File).BaseName"
powershell -Com (ls^ -File).BaseName

答案 4 :(得分:-1)

dir -Name -File

这适用于 PowerShell