如何解决使用未解析的变量或脚本参数创建脚本如“%~dp0”
在备份-恢复场景中,我试图从批处理中生成一个帮助程序。
帮助程序只是结合了 restore.bat
和形式为 state-%today%.zip
的参数,以允许在不打开命令提示符或拖放的情况下进行特定的恢复:
call restore.bat state-YYYYMMDD.zip
这样就可以很容易地由 backup.bat
生成。但是如果助手以管理员身份运行(这是耦合的实际目标),它就会失败,因为由于上下文切换,当前工作目录更改为 C:\Windows\system32
,这就是为什么找不到助手的同级文件的原因。>
这可以通过使用 %~dp0
来解决,它动态地返回辅助批处理的路径。我手工制作的解决方案按预期工作:
pushd %~dp0
call restore.bat %~dp0state-YYYYMMDD.zip
popd
因为 YYYYMMDD
是在备份时确定的。我现在需要从 backup.bat
中动态生成助手,第一种方法是
backup.bat
set HELPER=restore-%today%.bat
echo pushd %~dp0 > %HELPER%
echo restore.bat %~dp0state-%today% >> %HELPER%
echo popd >> %HELPER%
结果
helper-20210630.bat
pushd c:\users\me\test\
call restore.bat c:\users\me\test\state-20210630.zip
popd
...不可移植到其他文件夹。我如何将 %~dp0
逐字逐字传送到帮助程序批次?
我什么都没找到
我在 batch-file - Echo output to file | batch-file Tutorial 中发现的通过 %
转义 ^
的建议不起作用。
解决方法
我通过反复试验发现,百分号 (%
) 必须通过加倍 (%%
) 来转义。
test-path.bat
@echo off
echo %%cd%% : %cd%
echo %%~dp0 : %~dp0
set TEST_OUT=%~dp0test-out.bat
echo echo %%%%cd%%%% : %%cd%% >%TEST_OUT%
echo echo %%%%~dp0 : %%~dp0 >>%TEST_OUT%
call %TEST_OUT%
pause
顺便说一句:上面的脚本也可用于通过双击或按回车键或通过上下文菜单正常开始来显示当前工作导演的分歧 /em> → 以管理员身份运行
现在证明整个案例只是 Escape percent in bat file 的另一种变体。但我们都知道,一旦你找到了一个解决方案,你会突然发现它无处不在。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。