Batch file 批处理-将文件名中的空格替换为卷曲的%20

Batch file 批处理-将文件名中的空格替换为卷曲的%20,batch-file,curl,Batch File,Curl,我想先替换%%n中的所有空格,然后再将其交给curl,形成url以下载new.txt中指定的文件。我尝试用双引号和其他各种解决方案来替换空格,但似乎没有任何效果。curl仍然不能形成正确的url,并在空格前剪切文件名。不能对(for)参数使用字符串替换语法,这只适用于变量。 但由于您处于代码块中,因此需要使用延迟扩展 像这样的东西应该有用 for /f %%n IN (new.txt) DO IF NOT EXIST "%current%\%%n" ( ping -n 1 127.0.0.1

我想先替换%%n中的所有空格,然后再将其交给curl,形成url以下载new.txt中指定的文件。我尝试用双引号和其他各种解决方案来替换空格,但似乎没有任何效果。curl仍然不能形成正确的url,并在空格前剪切文件名。

不能对(for)参数使用字符串替换语法,这只适用于变量。
但由于您处于代码块中,因此需要使用延迟扩展

像这样的东西应该有用

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
)
对于命令可替换的参数/变量,您不能在
中进行字符串替换,必须先将其复制到单独的变量中才能使用它进行操作


此外,默认情况下,“for”命令将使用空格和制表符作为分隔符拆分/标记已读行,这就是文件名在第一个空格处被剪切的原因。将
“delims=“
选项置于
for
命令中会禁用此行为。

我尝试过,这可能是curl中的一个错误,但即使它现在下载了正确的文件名,实际上也没有下载文件。我有一堆2kb文件放在指定的位置。@user2280032,那么,2kb文件中有什么?404页在这些zip文件中。这很奇怪,因为url现在看起来很好。问题出现在filelistings中,现在就解决了。在删除旧文件时遇到了另一个问题<代码>对于/f“delims=“%%r IN(new.txt)DO ATTRIB%%r+h del/s/q”%current%\*.*“del/s/q”%current%\*.*“暂停/f”delims=“%%t IN(new.txt)DO ATTRIB%%t-h
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! ""
)
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
)