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


7

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

jslint scripts/**/*.js

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

jslint scripts/*/*.js

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

在Windows命令行中,这似乎不起作用。有什么办法可以定义相同的吗?

Answers:


5

没有'cos **.*在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>

因此,您可以将* .mp3替换为* .js,将mp3prog替换为jslint,从而得到想要的结果。

并删除@echo

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

您会看到它列出了它将执行的所有命令。它遍历c:\ tes及其所有子目录中的每个文件。

或从任何目录

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:\>

要么

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:\>

1

在这种特殊情况下,您所需要做的就是指定根目录名称,而不使用通配符。至少对于jshint确实如此,它现在比jslint更流行。

jshint scripts

要么:

cd scripts
jshint .

另请参见(其中包括应用于jshint的barlop的便捷技巧):https ://stackoverflow.com/a/30114333/1593924


谢谢你的提示。我的问题不是针对jslint / jshint,这只是一个例子。这是有关Windows命令行的一般问题。
chiccodoro

是的,但是我链接到的答案确实包含了几种更通用的解决方法(包括cygwin和powershell,甚至是for循环)。
乔恩·库姆斯
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.