batch动态生成脚本时如何将%~dp0原样输出到目标文件
Batch动态生成脚本保留%~dp0变量解决方案
核心原因
Batch脚本中%的转义规则和其他特殊符号不同,^仅用于转义<、>、|、&这类符号,要输出单个%字符,需要连续书写两个%进行转义。
正确实现代码
将你生成辅助脚本的代码替换为以下内容即可:
set HELPER=restore-%today%.bat echo pushd %%~dp0 > %HELPER% echo call restore.bat %%~dp0state-%today%.zip >> %HELPER% echo popd >> %HELPER%
说明
- 把需要原样保留的
%~dp0改写为%%~dp0,生成辅助脚本时会自动解析为%~dp0,后续辅助脚本运行时会动态获取自身所在目录,不会产生硬编码路径,支持目录迁移使用 - 补充了
call关键字,和你手工验证的可用逻辑保持一致,避免部分场景下restore.bat执行完毕后直接终止父脚本的问题 state-%today%.zip中的%today%不需要转义,会在backup.bat运行生成阶段自动替换为当天的实际日期字符串
生成效果验证
最终生成的restore-20210630.bat内容如下,完全符合预期:
pushd %~dp0 call restore.bat %~dp0state-20210630.zip popd
内容的提问来源于stack exchange,提问作者Wolf
相关产品推荐
相关产品推荐

