Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Windows批处理“;dir";命令变更?_Java_Windows_Batch File_Scripting - Fatal编程技术网

Java Windows批处理“;dir";命令变更?

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”之外,不再像以

这似乎不太可能,但我只能假设最近(本周)在Windows更新期间发生了一些变化

至少有两个用于现在工作的脚本不可用。也就是说,我几乎每天都使用脚本。其中包括我为一个小型Java项目编写的脚本生成器

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
选项所做的。