如何将子目录中特定类型文件的所有路径放入windows cmd中的文本文件中



我正在尝试创建一个源txt文件以传递给javac编译器。在文本文件中,我需要用语音标记包围子目录中所有.java文件的路径,以防文件夹名称包含空格,并且路径的任何\都需要是\\,因为\是转义的。使用文本文件,我将运行javac -d classes @sources.txt。这是可行的,我已经用我写入sources.txt的路径测试了它。然而,我一直在尝试使用命令行为我创建这个文件,因为如果有更多的文件,我必须编写每个路径,这会很麻烦。

到目前为止,我已经尝试运行for /f "delims=" %A in ('dir /s /B *.java') do @echo "%A" >>sources.txt。dir命令获取所有路径,echo用语音标记包围命令,但当我尝试运行以下命令来切换\to\\时,它不起作用:

for /f "delims=" %A in ('dir /s /B *.java') do @echo "%A:=\" >>sources.txt

这返回"0"<路径>:\=\\&";。我做错了什么?仅供参考:这是直接在cmd行中,而不是从文件中运行的。谢谢

替换需要在环境变量上完成,而不是在循环变量上。

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "delims=" %%A IN ('DIR /S /B /A:-D "*.java"') DO (SET "AA=%%~fA" & ECHO "!AA:=\!")

这也可以通过cmd.exe提示符生成,方法是从循环变量中删除一个PERCENT字符并使用:

"%ComSpec%" /V:ON /C "ECHO OFF & (FOR /F "delims=" %A IN ('DIR /S /B /A:-D "*.java"') DO (SET "AA=%~fA" & ECHO "!AA:=\!")) >>"sources.txt"

由于这似乎是一个命令提示符(cmd(问题,而不是一个批处理文件(如另一个当前答案所示(,因此这可能会达到您的目的:

(For /F "Delims=" %G In ('Dir "*.java" /A:-D /B /O:N /S 2^>NUL') Do @Set "}=%G" & %SystemRoot%System32cmd.exe /D /V /C "Echo !}:=\!") 1>"sources.txt"

最新更新