FOR 命令看不到隐藏文件

Syn*_*ech 6 windows command-line

我正在努力解决我遇到的最令人沮丧的错误之一。

错误描述:

  该for命令解释程序的命令无法看到隐藏的文件。

繁殖步骤:

  1. 创建临时目录
  2. 创建几个文件
  3. 为文件分配各种属性(包括隐藏)
  4. 使用类似的命令 for %i in (*) do echo "%i"

预期成绩:

for默认情况下或通过开关   在循环中处理所有文件。

实际结果:

  • 处理具有隐藏以外的任何属性的文件;跳过标记为隐藏的文件
  • 没有切换到for命令以允许它处理隐藏文件

含义:

   无法从命令提示符处理所有文件。

题:

   如何从命令提示符或批处理文件中处理隐藏文件(如果不是 DOS,至少在 Windows 中)?

Syn*_*ech 5

这是一种(丑陋的、令人不愉快的、不理想的)文件解决方法:

\n\n
for /f "tokens=* delims=" %i in (\'dir /b/a-d *\') do echo "%i"\n
Run Code Online (Sandbox Code Playgroud)\n\n

以及文件夹的版本(类似于for /d\xe2\x80\xa6):

\n\n
for /f "tokens=* delims=" %i in (\'dir /b/ad  *\') do echo "%i"\n
Run Code Online (Sandbox Code Playgroud)\n\n

以及两者的版本(没有for模拟,所以这是一个好处):

\n\n
for /f "tokens=* delims=" %i in (\'dir /b/a   *\') do echo "%i"\n
Run Code Online (Sandbox Code Playgroud)\n\n


\n文件 ( ) 的递归版本for\xe2\x80\xa6 /r

\n\n
for /f "tokens=* delims=" %i in (\'dir /b/s/a-d *\') do echo "%i"\n
Run Code Online (Sandbox Code Playgroud)\n\n

和文件夹 ( for /r /d\xe2\x80\xa6):

\n\n
for /f "tokens=* delims=" %i in (\'dir /b/s/ad  *\') do echo "%i"\n
Run Code Online (Sandbox Code Playgroud)\n\n

还有两个

\n\n
for /f "tokens=* delims=" %i in (\'dir /b/s/a   *\') do echo "%i"\n
Run Code Online (Sandbox Code Playgroud)\n\n



\n这或多或少有效,但肯定有其问题(特别是对于大量文件或文件夹)。希望有更好的解决方案,或者微软可以在补丁中修复/改进这个问题。

\n

  • 使用“tokens=*”,您可以省略“delims=”选项,并且“*”是多余的。另外 `dir /b/a` 将列出目录和文件。如果您只需要文件,则需要 `dir /b/a:-d`。由于 Windows 命令行的这种行为在 20 年内都没有改变,所以现在可能也不会改变。不喜欢它?请改用 VBScript 或 PowerShell。 (2认同)

Den*_*nis 5

您可以使用forfiles代替for.

语法完全不同,但它具有更多功能(例如,本地访问文件名、扩展名、文件大小和时间戳的方法)并且默认处理所有文件。

例如,代替

for %i in (*) do echo "%i"
Run Code Online (Sandbox Code Playgroud)

你会用

forfiles /c "cmd /c echo @file"
Run Code Online (Sandbox Code Playgroud)

或者干脆

forfiles
Run Code Online (Sandbox Code Playgroud)

因为"cmd /c echo @file"是命令开关的默认值。