从资源管理器以管理员身份运行时,批处理脚本失败,但是当从终端以管理员身份运行时则不会失败?

时间:2016-11-17 22:40:58

标签: batch-file

我有一个需要以管理员身份运行的批处理脚本。我将分发给用户,以便他们可以从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”行

有人知道为什么这不起作用吗?

2 个答案:

答案 0 :(得分:1)

首先,从params.txt左右取走" s,因为双引号表示字符串解析,而未引用是文件列表。

其次,尝试使用%~pd0\预先添加params.txt以确保正确的路径,而不是更改目录。

答案 1 :(得分:1)

正如@ n​​ephi12在他的回答中指出的,如果你的文件名没有空格,你可以删除引号,否则它认为IN子句是你要解析的字符串。如果需要引用文件名,则需要使用注释中指出的USEBACKQ选项。一旦您使用该选项,您的代码就可以正常工作。

但我想对你的代码说明一点。如果params.txt文件的内容是:

"DST=some\directory\name"

然后你的FOR命令就可以了:

for /f "usebackq tokens=1 delims=" %%G in ("params.txt") do set %%G

我不明白为什么你要回复%dst%变量100,000次?