for /f %%n IN (new.txt) DO IF NOT EXIST "%current%\%%n" (
ping -n 1 127.0.0.1 >nul
setLocal EnableDelayedExpansion
set n=1n: =%%20!
curl.exe --globoff -o "%current%\%%n" ""http://someserver.com/%%n ""
ping -n 3 127.0.0.1 >nul
)
我希望替换%% n中的所有空格,然后将其交给curl以形成一个url来下载new.txt中指定的文件。我尝试用双引号和各种其他解决方案来换取空格,但似乎没有任何效果。卷曲仍然没有形成一个合适的网址,并在空格之前剪切文件名。
答案 0 :(得分:3)
for /f "delims=" %%n IN (new.txt) DO IF NOT EXIST "%current%\%%n" (
set "n=%%n"
setLocal EnableDelayedExpansion
set "n=!n: =%%20!"
curl.exe --globoff -o "%current%\%%n" --url "http://someserver.com/!n!"
endlocal
)
你不能在for
命令可替换参数/变量中进行字符串替换,首先必须将其复制到一个单独的变量中以便与它一起操作
此外,默认情况下,对于命令,将使用空格和制表符作为分隔符来分割/标记已处理的行,这就是在第一个空格处剪切文件名的原因。在"delims="
命令中放置for
选项会禁用此行为。
答案 1 :(得分:0)
您不能对(FOR)参数使用字符串替换语法,这仅适用于变量 但是当你在代码块中时,你需要使用延迟扩展。
这样的事情应该有效
setlocal EnableDelayedExpansion
for /f "tokens=*" %%n IN (new.txt) DO IF NOT EXIST "%current%\%%n" (
set "line=%%n"
set "line=!line: =%%20!"
curl.exe --globoff -o "%current%\%%n" ""http://someserver.com/!line! ""
)