Windows 命令行中所有子目录或所有后代目录的通配符

chi*_*oro 9 windows command-line

我缺少目录的通配符。从 linux 我想到可以定义这样的路径:

jslint scripts/**/*.js
Run Code Online (Sandbox Code Playgroud)

它包括来自脚本目录树中所有后代目录的所有 js 文件。

jslint scripts/*/*.js
Run Code Online (Sandbox Code Playgroud)

包括 scripts/ 的所有直接子目录。

在 Windows 命令行中,这似乎不起作用。有没有办法定义相同?

bar*_*lop 6

没有通配符可以像在 Unix/Linux 中那样工作。在 Windows 命令行中**.*将列出当前目录中的文件和目录。但你做不到c:\blah\*\*

你可以做:

    C:\tes>for /r %f in (*.mp3) do @echo mp3prog %f
    mp3prog C:\tes\a.mp3
    mp3prog C:\tes\mof.mp3
    mp3prog C:\tes\qw.mp3
    mp3prog C:\tes\y\a.mp3

C:\tes>
Run Code Online (Sandbox Code Playgroud)

您会看到它列出了它将执行的所有命令。它遍历 c:\tes 中的每个文件及其所有子目录。所以你可以用 *.js 替换 *.mp3,用 jslint 替换 mp3prog,这可能会给你你想要的。

删除@echo 以执行命令而不是仅仅显示它们。(虽然@echo在调试时保留命令会很好)

无论是**.*在这些括号工作正常。

或从任何目录

    C:\>for /r c:\tes %f in (*.*) do @echo mp3prog %f
    mp3prog c:\tes\103.gif
    mp3prog c:\tes\a.mp3
    mp3prog c:\tes\mof.mp3
    mp3prog c:\tes\oo.mpg
    mp3prog c:\tes\qw.mp3
    mp3prog c:\tes\t.mpg
    mp3prog c:\tes\ta.mpg
    mp3prog c:\tes\t_.mpg
    mp3prog c:\tes\u.mpg
    mp3prog c:\tes\uu.mpg
    mp3prog c:\tes\y\a.mp3
    
    C:\>
Run Code Online (Sandbox Code Playgroud)

或者

    C:\>for /f %f in ('dir c:\tes /s/b') do @echo mp3prog %f
    mp3prog c:\tes\103.gif
    mp3prog c:\tes\a.mp3
    mp3prog c:\tes\ff
    mp3prog c:\tes\gg
    mp3prog c:\tes\mof.mp3
    mp3prog c:\tes\oo.mpg
    mp3prog c:\tes\qw.mp3
    mp3prog c:\tes\t.mpg
    mp3prog c:\tes\ta.mpg
    mp3prog c:\tes\t_.mpg
    mp3prog c:\tes\u.mpg
    mp3prog c:\tes\uu.mpg
    mp3prog c:\tes\y
    mp3prog c:\tes\y\a.mp3
    
    C:\>
Run Code Online (Sandbox Code Playgroud)