Java Windows批处理“;dir";命令变更?
这似乎不太可能,但我只能假设最近(本周)在Windows更新期间发生了一些变化 至少有两个用于现在工作的脚本不可用。也就是说,我几乎每天都使用脚本。其中包括我为一个小型Java项目编写的脚本生成器Java Windows批处理“;dir";命令变更?,java,windows,batch-file,scripting,Java,Windows,Batch File,Scripting,这似乎不太可能,但我只能假设最近(本周)在Windows更新期间发生了一些变化 至少有两个用于现在工作的脚本不可用。也就是说,我几乎每天都使用脚本。其中包括我为一个小型Java项目编写的脚本生成器 dir /s /B /a:-d *.java >sources.txt "%JAVA_HOME%"\bin\javac %javaopts% -d ..\classes -nowarn -classpath %clspath% @sources.txt 标准,对吗?除“dir”之外,不再像以
dir /s /B /a:-d *.java >sources.txt
"%JAVA_HOME%"\bin\javac %javaopts% -d ..\classes -nowarn -classpath %clspath% @sources.txt
标准,对吗?除“dir”之外,不再像以前那样删除目录名(根据a:-d)。因此,我的java编译脚本失败了。(当然,我也使用Eclipse。)
与中一样,源代码中列出的文件包含文件的完整路径(“C:\X\Y\Z\src\foo.java”)。通过手动删除src(“c:\x\y\z”)前面的路径,相同的脚本可以工作。我在选项上尝试了不同的情况,改变了javac命令,但由于源文件中标识的完整路径,我总是得到解析错误“unknown option c:…:)
不管它为什么发生,它现在正在发生,我正在寻找一个我还没有找到的替代方案。一个简单的替代方案-我可能可以编写一个循环,删除“src”之前的任何内容(例如)-但是这两个命令被引用了很多很多地方,所以我想我应该节省一些人的时间并发布我自己。发表评论的人是正确的。参数
/a:-d
不会删除目录。
看
如果您想“构建一个小型Java项目”(使用脚本的第二行),为什么要删除包含Java文件的文件夹,这些文件的完全限定文件名被写入sources.txt
/s:列出指定文件名在
指定的目录和所有子目录
/b:显示目录和文件(完全限定的名称)的简单列表,没有其他信息(即省略日期、时间、大小)
/a[[:]]:仅显示这些目录和目录的名称
具有指定属性的文件
如果使用/a
指定
-d
属性,目录
(d
表示目录
)不显示(-
表示不
)
底线是,
sources.txt
将有一个与掩码*.java
匹配的完全限定文件名的裸列表,在运行脚本时,无论当前目录在哪个目录下,这都是错误的。当使用递归/S
选项时,输出总是返回完整路径e> DDIR命令的属性用于列出当前目录中包含的目录,或者在使用减号时不列出当前目录中包含的目录。与文件中列出的路径名无关。/a:-D应该删除目录。而且,我相信它以前是这样做的。N注意-D)/A:-D
不会删除目录。它不会返回基名与您的*.java
glob匹配的每个子目录和文件,而是只返回与之匹配的文件。如前所述,它会将这些文件作为完全限定路径返回。如果您只希望返回文件,并且这些文件是相对于当前D返回的在iDirectory中,您可以通过运行命令,将单个项保存为变量,然后展开并替换变量值中的当前目录(不含任何内容)。或者,使用ForFiles
,即ForFiles/M*.java/S/C“Cmd/C Echo@RelPath”>“sources.txt”“
@StevenPowell,/A:-D
确实会从正在对其执行DIR
命令的目录的内容列表中删除目录。如果文件夹中有名为Steve
的文件夹和名为Steve.txt
的文件,则/a:-D
不会列出名为Steve
的文件夹。它和列出文件名的文件路径无关。这就是/S
选项所做的。