我有一个需要以管理员身份运行的批处理脚本。我将分发给用户,以便他们可以从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”行
有人知道为什么这不起作用吗?
答案 0 :(得分:1)
首先,从params.txt
左右取走" s,因为双引号表示字符串解析,而未引用是文件列表。
其次,尝试使用%~pd0\
预先添加params.txt以确保正确的路径,而不是更改目录。
答案 1 :(得分:1)
正如@ nephi12在他的回答中指出的,如果你的文件名没有空格,你可以删除引号,否则它认为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次?