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

How to put all paths of files of particular type in subdirectories into a text file in windows cmd?

我正在尝试创建一个 sources 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 命令获取所有路径并且回显用语音标记包围命令但是当我尝试 运行ning 以下命令而不是将 \ 切换为 \\ 它不起作用:

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

此returns“<路径>:\=\\”。我究竟做错了什么? 仅供参考:这直接在 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"

因为这似乎是一个命令提示符,() question, and not a ,(如其他当前答案所示),也许这会达到您的预期:

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