试图回显/重定向/附加一个变量值,该变量值中包含&和空格,而没有引号,这会把事情搞砸

Trying to echo/redirect/append a variable value that has & and spaces in it without the quotes messing things up

提问人:fortissimo 提问时间:12/18/2022 最后编辑:Ken Whitefortissimo 更新时间:12/18/2022 访问量:78

问:

在批处理文件中,假设 %PageName% 的值为:

This & That

和 %FolderName%:

Stuff & Junk

我希望能够回显以下行并将其附加到 HTML 文件中。该行的扩展或“呈现”形式在 HTML 文件中如下所示:

<li> <a href="Stuff & Junk/This & That.html">This & That</a></li>

当然,在理想情况下,我只需在批处理文件中键入此内容即可生成此结果:

echo <li> <a href="Stuff & Junk/This & That.html">This & That</a></li> >> "Stuff & Junk/index.html"

但当然,这并不是一个完美的世界,在变量中存储与号和空格会让一切变得头疼十亿倍。我试过了:

echo ^<li^> ^<a href="%FolderName%"/"%PageName%".html^>"%PageName%"^</a^>^</li^> >> "%FolderName%\index.html"

这会将以下文本追加到 index.html 文件:

<li> <a href="Stuff & Junk"/"This & That".html>"This & That"</a></li>

...这太可怕了,因为引号搞砸了一切。但是,如果我去掉引号,我就会出现语法错误,因为与号将行分解为多个命令。我被困在岩石和坚硬的地方之间。有没有解决方案?

批处理文件 回显 引用 io-redirection &amp;

评论

0赞 aschipfl 12/19/2022
这个呢:?(echo ^<li^>^<a href="%FolderName%/%PageName%.html"^>%PageName:&=^&%^</a^>^</li^>) >> "%FolderName%/index.html"
0赞 fortissimo 12/19/2022
哇,这也有效......很有创意 - 我不知道可以在不使用“if”语句的情况下将命令放在括号中!
0赞 aschipfl 12/20/2022
好吧,括号只是为了避免输出行末尾的尾随空格。这里的诀窍是只有当它出现未加引号时才逃脱与号,这是它会伤害的地方......

答:

1赞 Magoo 12/18/2022 #1
@ECHO Off
SETLOCAL
SET "pagename=This & That"
SET "foldername=Stuff & Junk"

FOR /f "delims=" %%e IN ("%pagename%") DO FOR /f "delims=" %%y IN ("%foldername%") DO ECHO ^<li^> ^<a href="%%y%%e.html"^>%%y^</a^>^</li^>

GOTO :EOF

诀窍是将笨拙的字符串分配给一个元变量 (),之前的结果有机会弄清楚发生了什么......%%e/%%yechocmd

评论

0赞 fortissimo 12/18/2022
天哪,天哪,给贝茜全能的莫利鳄梨酱!这是我能想到的唯一适合您的解决方案的短语......使用嵌套的 1-item for 循环使 CMD 做一些它不想做的事情。我必须承认,对于所有智商低于 7,590 的人来说,这基本上是不可能的,我感觉好多了。谢谢你,roo times two,Magoo!(roo,因为你在澳大利亚......