batch-file - 如何在 Windows 10 上的批处理块中使用 ~dp0
问题描述
这对我来说似乎是一个错误......
我正在寻找一个解释或一个漂亮的解决方法......
当脚本位于以右括号结尾的部分()
如 中)时Program Files(x86)
,脚本似乎“吃掉”了右括号。
不会在 Windows 7 上发生,只是在 Windows 10 上发生......
@echo off
echo %%~dp0 outside the code block = %~dp0
if 0 EQU 0 (
echo %%~dp0 inside the code block = %~dp0
)
您可以使用位于以下位置的脚本进行尝试:
- C:\Program Files (x86)\
- C:\Program Files (x86)\Some Folder\
- C:\Program Files (x86)\Some Folder\Another one\
- C:\test-ok\test-not-ok-(1)\
解决方案
发生这种情况是因为立即%
展开发生在括号等特殊字符被识别之前。
为了防止你可以引用字符串,所以特殊字符受到保护:
@echo off
echo %%~dp0 outside the code block = "%~dp0"
if 0 EQU 0 (
echo %%~dp0 inside the code block = "%~dp0"
)
当然,引号可能会打扰。但是您可以使用延迟扩展来回显未引用的路径:
@echo off
set "string=%~dp0"
setlocal EnableDelayedExpansion
echo %%~dp0 outside the code block = !string!
if 0 EQU 0 (
echo %%~dp0 inside the code block = !string!
)
endlocal
或者,您可以在特殊字符识别后使用for
循环来实现另一个扩展阶段:
@echo off
for %%I in ("%~dp0") do (
echo %%~dp0 outside the code block = %%~I
if 0 EQU 0 (
echo %%~dp0 inside the code block = %%~I
)
)
推荐阅读
- javascript - best practice puppeteer waitForSelector or setTimeout
- javascript - 有没有办法自动从服务器下载文件?
- python - 如何检查文件是否有重复行?
- javascript - 过滤对象数组并设置为状态数组变量
- sql-server - 提高开放查询性能
- javascript - 如何防止用户仅在输入字段的第一个位置输入空格,并且可以在角度的某些字符之后添加空格?
- java - 是否可以将 Android Studio 应用程序转换为 IOS?(爪哇)
- python - 如何在 Jetson Xavier 上的 Numba 中使用 OpenCV?
- apache - 如何将 wesbite 保留在子域中并防止重定向到根文件夹
- java - 如何从我的适配器解决此意图崩溃问题?