批量“设置”命令在单行命令中使用时,将其他命令设置为变量

时间:2018-10-24 19:33:23

标签: batch-file

最终,我试图制作一个批处理文件,以使用“ 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

它没有按照我想要的方式工作。 sources.txt完全为空。我知道是因为“ @set”,但这意味着@echo无法正常工作。

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

1 个答案:

答案 0 :(得分:0)

您不能对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