【发布时间】:2016-11-17 22:40:57
【问题描述】:
我有一个需要以管理员身份运行的批处理脚本。我将分发给用户,所以如果他们可以从 Windows 资源管理器中运行它是最好的。
不幸的是,从资源管理器运行时它不起作用(右键单击 -> 以管理员身份运行)。从预先存在的管理终端调用时,它确实有效。
最初我认为问题出在活动目录上,但我添加了“cd /d %~dp0”作为第一个命令。我通过 echo 确认这会将它们放在同一个目录中,但是从资源管理器运行时仍然失败。
读取与.bat 相同目录中的外部文件时发生故障。从资源管理器运行时,它会拉空字符串。这是示例代码:
rem Make sure active directory is correct (verified that this works)
cd /d %~dp0
rem Load parameters from params.txt
for /f "delims== tokens=1,2" %%G in ("params.txt") do set %%G=%%H
rem Print params (it's a loop so you can read it when running from expl.)
for /l %%a in (1 1 100000) do echo %DST%
然后您只需要确保 params.txt 与 .bat 位于同一目录中并包含“DST=some\directory\name”行
有人知道为什么这不起作用吗?
【问题讨论】:
-
试过
setlocal enabledelayedexpansion吗? (只是一个疯狂的猜测) -
是的,结果相同。 ://
-
尝试用简单的
echo %DST%替换循环,然后是pause以保持窗口打开? -
这样就简单多了!但是不行,还是不行。
-
您提到您的 params.txt 文件中有“其他参数”。如果您可以使用正则表达式来识别您要查找的行(或者至少排除有问题的行,如果有的话),您可以尝试类似
'type "params.txt"^|findstr /R "="'(代替“params.txt”)。此表达式仅抓取其中包含“=”的行,但显然您可以根据实际内容制作更有用的正则表达式。
标签: batch-file