批处理"Set"命令在单行命令中使用时将其他命令设置到变量中



>最终,我正在尝试制作一个批处理文件,以使用"dir"自动生成Java源文件夹中的源文件,将单反斜杠替换为双反斜杠,并在dir的每个输出的开头和结尾添加双引号。

请不要问为什么我不使用 IDE 或构建工具,这不是这里的重点。

(for /f "delims=" %%f in ('dir /b /s /c *.java') do @("@set var=%%f:=\%%"; @echo %var%)) > sources.txt
javac -cp ".apis*;." -d "." @sources.txt

它没有按照我想要的方式工作。 来源.txt完全是空的。我知道这是因为"@set",但这意味着@echo不起作用。

当我在cmd中测试第一行时,我发现@set还将分号后面的所有内容都设置为变量中。如何获取 @set 命令的断点?

不能对FOR元变量执行字符串操作。 必须先将其分配给环境变量。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
(for /f "delims=" %%f in ('dir /b /s /c *.java') do (
set "var=%%f"
echo !var:=\!
))>sources.txt
javac -cp ".apis*;." -d "." @sources.txt

最新更新