使用批处理以路径中的空格递归编译?

时间:2015-09-11 22:02:13

标签: java batch-file javac

我目前有一个像这样的批处理脚本:

@echo off

dir /s /B *.java > sources.txt
javac -d bin @sources.txt

pause

这适用于没有空格的目录,但现在可以使用。

我尝试过这样的方法将所有条目放在引号中:

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

但是,只要路径中出现\,就会出错。我需要一种方法来逃避所有空格和斜杠,并将其写入sources.txt

1 个答案:

答案 0 :(得分:2)

这应该有用。

@echo off
setlocal enabledelayedexpansion
(
  for /f "delims=" %%f in ('dir /s /B /A-D *.java') do (
    set "li=%%~f"
    set "li=!li: =^ !"
    set "li=!li:\=\\!"
    @echo "!li!"
  )
)>sources.txt
echo javac -d bin @sources.txt
endlocal
EXIT /B 0

根据How to run javac with paths as argument that contain white spaces? 你必须使用像/这样的unix路径而不是\ 因此,set "li=!li:\=\\!"取代set "li=!li:\=/!"也应该有用。