为何FOR循环传递文本文件URL至子函数时会截断查询字符串?
问题解决:批处理传递URL时查询字符串被截断的原因及修复方法
问题原因
批处理的call命令传递参数时,默认会把**等号(=)**当作参数分隔符。你的URL里包含=,所以会被拆分成多个参数,子函数只取了第一个参数%~1,自然就截断了后面的查询字符串。
修复方法
把传递的URL用双引号包裹,让整个URL被识别为一个完整参数,同时在子函数里保留去引号的写法:
修改后的完整脚本:
:downloader FOR /F "delims=" %%i IN (urls.txt) DO (call :sub_function "%%i") goto :eof :sub_function echo here url is: %~1
- 核心改动:在
call :sub_function后给%%i添加双引号"%%i",强制将整行URL作为单个参数传递。 %~1的作用是自动去掉参数外层的双引号,输出原始完整的URL。
验证效果
执行修改后的脚本,输出会显示完整的URL:
here url is: www.google.de/test1.yaml?at=refs%2Fheads%2Fmaster here url is: www.google.de/test2.yaml?at=refs%2Fheads%2Fmaster here url is: www.google.de/test3.yaml?at=refs%2Fheads%2Fmaster
内容的提问来源于stack exchange,提问作者employee
相关产品推荐
相关产品推荐

