BATCH - 用%20替换文件名中的空格以用于curl

时间:2014-05-08 10:15:34

标签: batch-file curl

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中指定的文件。我尝试用双引号和各种其他解决方案来换取空格,但似乎没有任何效果。卷曲仍然没有形成一个合适的网址,并在空格之前剪切文件名。

2 个答案:

答案 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! ""
)