我正在努力解决我所遇到过的最令人沮丧的错误之一。
错误描述:
for
命令解释器的命令无法看到隐藏文件 。
复制步骤:
- 创建临时目录
- 创建一些文件
- 为文件分配各种属性(包括隐藏)
- 使用类似命令
for %i in (*) do echo "%i"
预期成绩:
for
所有文件均默认或通过开关 在循环中处理。
实际结果:
- 具有除隐藏之外的任何属性的文件都会被处理;标记为隐藏的文件将被跳过
- 命令中没有
for
允许其处理隐藏文件的开关
含义:
没有办法处理全部从命令提示符中获取文件。
问题:
隐藏文件到底如何通过命令提示符或批处理文件来处理(至少在 Windows 中是如此,如果不是 DOS 的话)?
答案1
你可以使用forfiles
代替for
。
语法完全不同,但它具有更多功能(例如,本地访问文件名、扩展名、文件大小和时间戳的方法)并且它处理全部默认文件。
例如,
for %i in (*) do echo "%i"
你会用
forfiles /c "cmd /c echo @file"
或者简单地
forfiles
因为"cmd /c echo @file"
是命令开关的默认值。
答案2
以下是一个(丑陋、令人不快、不理想的)文件解决方法:
for /f "tokens=* delims=" %i in ('dir /b/a-d *') do echo "%i"
还有一个文件夹版本(类似于for /d…
):
for /f "tokens=* delims=" %i in ('dir /b/ad *') do echo "%i"
还有一个适用于两者的版本(没有for
模拟,所以这是有好处的):
for /f "tokens=* delims=" %i in ('dir /b/a *') do echo "%i"
文件的递归版本(for… /r
):
for /f "tokens=* delims=" %i in ('dir /b/s/a-d *') do echo "%i"
和文件夹(for /r /d…
):
for /f "tokens=* delims=" %i in ('dir /b/s/ad *') do echo "%i"
并且两者
for /f "tokens=* delims=" %i in ('dir /b/s/a *') do echo "%i"
这或多或少是可行的,但肯定存在问题(尤其是对于大量文件或文件夹)。希望有更好的解决方案,或者微软可以在补丁中修复/改进此问题。