gpt4 book ai didi

windows - 如何忽略 url 中的符号以替换批处理脚本中的字符串?

转载 作者:可可西里 更新时间:2023-11-01 11:46:48 26 4
gpt4 key购买 nike

需要编写一个批处理脚本,用 HTML 文档中的 URL 替换变量。 URL 来自用户输入。

@echo off
setlocal DisableDelayedExpansion
set /p vargs="Google Search: "
set "search=xxgs"
set "replace=%vargs%"
del output.html
for /F "delims=" %%a in (test.html) DO (
set line=%%a
setlocal EnableDelayedExpansion
>> output.txt echo(!line:%search%=%replace%!
endlocal
)

如果我粘贴一个 Google URL(例如 https://www.google.de/search?q=test&oq=test&aqs=chrome..69i57j69i60j69i65l3j69i60.704j0j9&sourceid=chrome&ie=UTF-8),它会返回一个错误,因为和号。

我怎样才能停止对 & 符号的解释,而只用 url 替换我的变量 xxgs?

最佳答案

问题在于和号(以及其他一些字符)对 cmd 具有特殊含义,以及您正在扩展变量 replace 的事实使用正常(立即)百分比扩展(%replace%)。

由于您正在使用嵌套在延迟扩展表达式(即子字符串替换 !line:%search%=%replace%! )中的此变量,因此不能对 replace 使用延迟扩展.但是,您可以通过使用另一个 for /F 来延迟值扩展。循环,如 for在处理特殊字符(如 ^&()"<>|)后,变量也会扩展:

@echo off
setlocal DisableDelayedExpansion
set "vargs="
set /p vargs="Google Search: "
set "search=xxgs"
set "replace=%vargs%"
> "output.txt" (
for /F "usebackq delims=" %%a in ("test.html") do (
set "line=%%a"
setlocal EnableDelayedExpansion
for /F "delims=" %%b in (""!replace!"") do (
echo(!line:%search%=%%~b!
)
endlocal
)
)

内部for /F循环接收 !replace! 的值,可在 %%~b 中找到之后;自 %%~bline 的实际子字符串替换之前仍然展开完成后,它提供了预期的输出。表达式 ""!replace!"" 中的外引号对被 for /F 删除并告诉它将余数视为文字字符串(因为没有 usebackq 选项);内对 ""for /F 处理连同 replace 的值然后被 ~ 删除%%~b 中的修饰符;使用这个技巧,循环甚至在 replace 的情况下执行为空,因为字符串显示为 ""for /F (请注意,循环会忽略空字符串/行),因此即使用户在提示中不输入任何内容,脚本也能正常工作。如果您不希望出现此行为并在用户输入为空时跳过子字符串替换,只需删除外部引号对 "" 即可。并替换 %%~b%%b .

请注意 replace 的值中带有感叹号仍然导致意想不到的结果,因为for在处理延迟扩展之前扩展变量,这会消耗 !字符。

除此之外,我更改了以下内容:

  • 变量vargs在提示 set /P vargs= 之前被清除,所以当用户什么都不输入时,vargs确实是空的,因为 set /P在没有输入的情况下保持之前的值;
  • 我没有将每一行都写入输出文件,而是重定向了整个 for /F文件的循环结构output.txt只有一次;因为这允许使用 >运算符而不是 >> ,输出文件不必再提前删除(虽然你删除了 output.html 而不是 output.txt ,但我认为这只是一个错字);
  • 我添加了 usebackq for /F 的选项并引用文件路径/名称,因此它甚至可能包含空格或特殊字符;
  • set的语法在循环结构中更改为引用的结构 set "line=%%a" ;

关于windows - 如何忽略 url 中的符号以替换批处理脚本中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42841621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com