如何对多个文件夹中的文件执行命令?

如何对多个文件夹中的文件执行命令?

我正在尝试找出一种方法来对多个文件夹中的多个文件执行命令。据我所知,循环for是在 CMD 中执行此操作的最佳方法(我使用的是 Windows)。但我遇到了一些问题,我将使用我需要执行的操作之一作为示例。

对于此特定命令,我尝试在多个文件夹中为多个文件创建文件夹。以下是视觉效果:

Folder A  
    File 1.avi  
    File 2.avi  
Folder B  
    File 3.avi  
    File 4.avi

我进行了一些搜索,然后想出了这个命令:

for /f "delims=*" %a in ('dir *.avi /b /s') do md "%~na"

这是我收集的这里。这几乎是正确的——它为多个文件夹内的每个文件创建一个文件夹。问题是,我需要这些新文件夹包含在与文件相同的文件夹中。此特定命令会将新文件夹放在原始文件夹的位置,而不是放在原始文件夹内。

有人有什么想法吗?任何帮助都将不胜感激。谢谢。

答案1

  1. 标准调试技术是将echo命令插入脚本甚至复合/复杂命令中。如果你这样做

    for /f "delims=*" %a in ('dir *.avi /b /s') do @echo md "%~na"
    

    你会得到输出

    "file 1"
    "file 2"
    "file 3"
    "file 4"
    

    笔记:

    • @阻止echo命令他们自己显示,因此您只能看到它们的输出。
    • "delims=…"告诉for 如何解析命令的输出行dir *.avi /b /s。我不知道您链接到的答案为什么建议"delims=*"。但默认行为是在空格处分行,因此,如果您的目录和/或文件名包含空格(如您所指出的),则应使用"delims="(指定没有分隔符)来使其工作。
  2. 如果你输入for /?help for,你将获得有关该命令的文档for。在第五页,你会看到

    In addition, substitution of FOR variable references has been enhanced.
    You can now use the following optional syntax:
    
        %~I         - expands %I removing any surrounding quotes (")
        %~pI        - expands %I to a path only
        %~nI        - expands %I to a file name only
    
    The modifiers can be combined to get compound results …
    

    这解释了为什么%~na只获取*.avi全名在 中的文件的文件名%a。现在尝试

    for /f "delims=" %a in ('dir *.avi /b /s') do @echo md "%~pa"
    

    你会得到

    当前目录\文件夹 A\”当前目录\文件夹 A\”当前目录\文件夹 B\”当前目录\文件夹 B\”

    由此我们可以得出结论,你想做

    for /f "delims=" %a in ('dir *.avi /b /s') do md "%~pa%~na"
    

    在 下创建file 1file 2目录Folder A,在 下创建file 3和目录。并且,正如@dave_thompson_085 指出的那样,您可以将 合并到 中。file 4Folder B%~pa%~na%~pna

相关内容