以管理员身份将带有空格的变量传递到命令行

以管理员身份将带有空格的变量传递到命令行

强文本script.bat 放置在 sendTo 文件夹中(文件设置为以管理员身份运行,从属性 -> 高级 -> 以管理员身份运行)

@echo off

cd %~dp1

echo %~dp1

echo "%~1"

pause

如果我通过右键单击-->发送到--> script.bat 将参数传递给此文件(例如文件 superuser acc.txt 脚本),则可以工作,但如果我以管理员身份运行脚本,cmd 窗口出现了一秒钟,但是不起作用。

我如何以管理员身份运行此脚本?这段代码之后,有一个需要管理员权限的命令。

编辑#1 我认为问题与带有空格的文件名或路径名里面像“c:\path to space\”或者“file with space.txt”并以管理员身份运行该脚本。

答案1

在文件夹中创建批处理文件的快捷方式shell:sendto,并按如下方式更改其属性:

  • 右键点击 -> ˙属性˙ ->Shortcut选项卡;
  • 目标-> cmd /C "D:\bat\SU\931003.bat"
  • Advanced按钮->以管理员身份运行。

请注意,下面的代码片段中的第一个echo "%CD%"显示了脚本的初始工作目录("C:\Windows\system32"如果通过功能启动SendTo):

==>type D:\bat\SU\931003.bat
@echo off
echo initial working directory "%CD%"
pushd "%~dp1"
echo current working directory "%CD%"
echo paramer #1 supplied "%~1"
echo all paramers %*
net session
pause

SendTo 文件夹中的批处理快捷方式(以管理员身份运行)

示例输出

initial working directory "C:\Windows\system32"
current working directory "D:\bat\1 & 2"
paramer #1 supplied "D:\bat\1 & 2\931003 test.txt"
all paramers "D:\bat\1 & 2\931003 test.txt" "D:\bat\1 & 2\batchfile.bat"
There are no entries in the list.

Press any key to continue . . .

以上输出显示:

  • 适用于稍微不寻常的路径和文件名,不仅包含空格,甚至包含&“与”字符......
  • 以管理员身份工作,否则net session命令将返回System error 5 has occurred错误Access is denied消息。

答案2

您可以使用鲁纳斯命令如下:

runas /user:username program

您还可以使用类似提升,一个命令行 UAC 提升实用程序,专门用于需要管理员权限的命令:

elevate [(-c | -k) [-n] [-u]] [-w] command

Options:
  -c  Launches a terminating command processor; equivalent to "cmd /c command".
  -k  Launches a persistent command processor; equivalent to "cmd /k command".
  -n  When using -c or -k, do not pushd the current directory before execution.
  -u  When using -c or -k, use Unicode; equivalent to "cmd /u".
  -w  Waits for termination; equivalent to "start /wait command".

相关内容