以管理员身份运行批处理文件不会将变量回显到 .txt 文件,也不会再将变量设置为 .txt 文件的内容

Running batch file as admin does not echo variable to .txt file nor set the variable to the .txt file's content anymore

提问人:leiseg 提问时间:5/24/2023 最后编辑:leiseg 更新时间:5/24/2023 访问量:69

问:

我想以管理员身份运行批处理文件并将变量回显到 .txt 文件,或者如果 .txt 文件存在,请将变量设置为 .txt 文件的内容。

在没有管理员权限的情况下运行批处理文件,我的代码运行良好。以管理员身份运行批处理文件时,我的代码不再起作用,并且不会创建 .txt 文件,也不会将变量设置为 .txt 文件的内容。

以下是我用于回显 .txt 文件并将变量设置为 .txt 文件内容的代码:

:: setting variable to path.txt's content

for /f "usebackq delims=" %%a in ("%cd%\_temp\path.txt") do if exist "%%a" (
    set "test=%%a"
    goto menu
) else (
    if exist "%cd%\_temp\*" del /f /q "%cd%\_temp\*"
    goto setup
)

:: echoing path

>"%cd%\_temp\path.txt" echo %test%

对于此代码,当我以管理员身份运行批处理时,它会返回错误。The system cannot find the path specified.

变量 batch-file echo admin

评论


答:

2赞 Keith Langmead 5/24/2023 #1

我怀疑您的问题是以管理员身份运行时的默认文件夹路径与您自己运行时的默认文件夹路径不同。

例如,您可以在此处看到有关效果的讨论 https://superuser.com/questions/1653018/how-do-i-change-the-default-command-prompt-directory-in-windows-7,但默认情况下,正常启动时与管理员启动时最终路径不同。cmd.exe

您只需将 a 添加到脚本中以显示当前路径即可确认这一点。echo %cd%

最简单的选择是指定所需文件的完整路径,或者在开始时使用命令移动到该路径,这样您就不会依赖默认路径始终相同。我认为,无论如何,这只是一般的好做法。cd

评论

1赞 Compo 5/24/2023
当“以管理员身份运行”时,当前目录(结果为 )将为 。%cd%C:\Windows\System32
0赞 leiseg 5/25/2023
@Keith Langmead @Compo感谢您的解释!这是我的问题,我通过添加到我的脚本中来修复它。cd /d "%~dp0%"
1赞 Compo 5/25/2023
@leiseg,从技术上讲应该是,请注意缺少尾随百分比字符CD /D "%~dp0"
0赞 leiseg 5/26/2023
@Compo哦,是的,我不小心添加了第二个。%