如何使用Windows轻松查找没有扩展名的文件


0

我的硬盘驱动器上有一些文件没有任何扩展名。手动找到它们非常困难,我真的不喜欢这样一个事实,即我需要尽快更换我的鼠标,因为不是很大但却非常突出的损坏,通过不断尝试找到这些文件对硬件做了很多单击和滚动,因为它们是单个文件夹中数千个文件中的几百个。

这里有没有人知道 cmd 要么 PowerShell 命令,或一些Windows资源管理器搜索高级查询语法,以帮助简化此任务?


问题是什么?
Toto

你在和那个Lorem Ipsum文本开玩笑吗?
SimonS

1
资源管理器: kind:= -folder extension:= ""
PetSerAl

不幸的是@PetSerAl似乎没有工作(也试过调整它,交换它们但没有任何东西)。
computationalprince

1
@computationalprince它似乎只在索引位置有效。这应该也可以在索引位置工作: kind:= -folder type:= -[] extension:= []
PetSerAl

Answers:


5

使用Windows查找没有文件扩展名的文件

Windows资源管理器 - 高级查询语法

按照 PetSerAl 这里有一些 文件资源管理器高级查询语法 方法开始,但进一步阅读等效的 命令行 批处理脚本 这项任务的方法。

递归搜索

kind:= -folder type:= -[] extension:= []

非递归

只需选择“ 当前文件夹 “通过GUI选项” 搜索 “ 标签

enter image description here

要么

kind:= -folder type:= -[] extension:= [] folder:"C:\folder\path"

你可以使用 for / f 循环迭代a的输出 DIR 命令与 /B/A-D 参数,然后使用一些条件 如果 只使用指定目录中的迭代文件的替换来输出没有任何扩展名的文件的逻辑。

命令行

注意: 这假定您在命令行中的目录是您需要搜索以显示没有扩展名的文件的目录。

FOR /F "TOKENS=*" %A IN ('dir /B * /A-D') DO IF /I [%~nxA]==[%~nA] ECHO %~A

批处理脚本

注意: 这是您设置的批处理脚本 SET Src= value是您需要搜索以显示没有扩展名的文件的目录。

@ECHO ON
SET Src=C:\folder\path
FOR /F "TOKENS=*" %%A IN ('DIR /B "%Src%\*" /A-D') DO IF /I [%%~nxA]==[%%~nA] ECHO %%~A
PAUSE
EXIT

更多资源

  • 对于/ F.
  • FOR /?

    另外,替换了FOR变量引用   增强。您现在可以使用以下可选语法:

    %~nI        - expands %I to a file name only
    %~xI        - expands %I to a file extension only
    
  • 迪尔

  • 如果

从CMD的角度来看,包含点的每个文件名都有一个扩展名,即使它不是一个。因此,根据长度或内容检查有效性的延伸可能是值得的。 (assoc将列出已知的扩展名)
LotPings

1
在递归/非递归搜索之间切换非常容易 GUI
PetSerAl

1
(1)该问题未指定Windows版本。 Windows7和更早版本没有文件资源管理器; Windows资源管理器(由OP明确引用)没有功能区或类似于您显示的“搜索”选项卡。 (2)仅供参考,我可以确认一下 kind:= -folder type:= -[] extension:= [] 高级查询语法适用于Windows7。但同样如此 kind:-folder type:-[] extension:[] - 你不需要 = 标志(或它们之后的空格)。事实上, kind:-folder extension:[]type:-folder extension:[] 似乎足够好了。 ......(续)
Scott

1
(续)...(3)什么时候 dir /B * /A-D 产生不同的结果 dir /B /A-D (即何时 dir * 产生不同的结果 dir )?
Scott

1

对于PowerShell解决方案:

Get-ChildItem -Path $Path -Recurse -File -Filter '*.'

要么:

Get-ChildItem -Path $Path -Recurse -File | Where-Object Extension -eq ''

请注意 -File 参数需要PowerShell v3 +。


0

在命令提示符中,只需使用 *.

C: \目录\名称  > DIR

08/24/2018 03:33 AM
08/24/2018 03:33 AM ..
08/24/2018 03:33 AM 16 a
08/24/2018 03:33 AM 18 b.c
08/24/2018 03:33 AM 20 d.e.f.
               3个文件54个字节

C:  \目录\名称  > dir *。

08/24/2018 03:33 AM
08/24/2018 03:33 AM ..
08/24/2018 03:33 AM 16 a
               1个文件16个字节

C:  \目录\名称  > 

请记住,Windows命令提示符不是Unix。 在Unix文件名中,dot( . )只是一个普通人物 (除了以点开头的文件名被隐藏的事实外)。 在Unix中, *e* 表示包含的所有文件名 e, 和 *.* 表示所有文件名 (明确) 包含一个 .

命令提示符的规则比较棘手。 * 表示所有文件名(即使是具有扩展名的文件名)。 和 *.* 也意味着所有文件名(即使是不包含文件名的文件名) . )。 但 *. 表示没有扩展名的所有文件名。


0
ls | ? {$_.Extension -eq ''}

这使用最大速记。但它与@BaconBits的代码完全相同。 我更喜欢速记。对初学者来说更难阅读,但更具表现力和简洁性


2
我们有最小答案长度的原因是我们希望每个帖子都有 一些 解释和/或评论的水平。
Scott
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.