pipe理员使用双引号参数batch file的快捷方式

采取一个极其简单的batch file

echo hi pause 

保存为test.bat。 现在,创build一个test.bat的快捷方式。 快捷方式运行batch file,打印“嗨”,然后等待按键按预期。 现在,给快捷方式的目标添加一些参数。 现在你有一个快捷方式来:

 %path%\test.bat some args 

快捷方式像以前一样运行batch file。

现在,以pipe理员身份运行快捷方式。 (顺便说一下,这是在Windows 7上)。您可以使用右键单击 – >以pipe理员身份运行,或者转到快捷方式的属性并选中高级部分中的checkbox。 告诉UAC,没关系,快捷方式运行batch file。

现在,更改快捷方式的目标中的参数以添加双引号:

 %path%\test.bat "some args" 

现在尝试pipe理员的快捷方式。 这次不行! 一个命令窗口popup,并消失得太快,看不到任何错误。 我尝试添加> test.log 2>&1到快捷方式,但在这种情况下没有创build日志。

尝试运行相同的快捷方式(使用双引号),但不能以pipe理员身份运行。 它运行良好的batch file。 所以,看起来行为不是因为双引号参数,并不是因为它以pipe理员身份运行。 这是两个奇怪的组合。

我也尝试从pipe理员的命令窗口运行相同的命令。 这按预期运行batch file没有错误。 从命令窗口运行快捷方式产生了一个新的命令窗口,闪烁并离开。 所以显然这个问题是由pipe理员,快捷方式和双引号的组合引起的。

我完全被难住了,有没有人有任何想法是怎么回事? 我也想要一个解决方法。

我只是运行进程监视器,这是我看到的:

以用户身份运行:

  cmd / c“”C:\ Users \ Sunbelt \ Desktop \ test.bat“”一些参数“” 

作为管理员运行:

  “C:\ Windows \ System32 \ cmd.exe”/ C“C:\ Users \ Sunbelt \ Desktop \ test.bat”“一些参数” 

由于某些原因,“以管理员身份运行”的情况并未引用整个命令。 它似乎试图运行该命令:

  C:\ Users \ Sunbelt \ Desktop \ test.bat“”一些参数 

我猜想,因为第一个空格被引用,它实际上试图运行以下命令:

  “C:\ Users \ Sunbelt \ Desktop \ test.bat一些”参数 

在进程监视器日志中,“C:\ Users \ Sunbelt \ Desktop \ test.bat some”有一个文件系统条目“NO SUCH FILE”。 以Admin身份运行时,我不知道为什么会有所不同,但这就是正在发生的事情。

要解决这个问题,请在不带空格的路径上创建另一个bat文件,并使用不带空格的文件名,只需执行以下操作:

 call "Long path to original bat file\Original bat file.bat" 

这个辅助bat文件可以作为管理员运行。

您现在可以创建一个快捷方式到这个辅助bat文件,并检查运行作为管理员在快捷方式的高级选项。 快捷方式可以放在一个带有空格的路径上,并且可以有一个包含空格的文件名。

在我的情况下,我只想传递一个文件名作为参数,但路径中有空格。

我发现这个案例的解决方案(如果这是可以截断文件名)。

使用CALL.exe的语法创建另一个bat文件(input_gate.bat)以删除路径中的空格。 假设这个快捷方式被命名为test.lnk,并且和input_gate.bat位于同一条路径上:

 call %~sdp0test.lnk %~sf1 

这个过程作为参数来测试,以短格式完整的文件名,具有管理员权限。

  • %〜sdp0 – >是短格式的当前路径(对于input_gate.bat)。
  • %〜sf1 – >是第一个传递给input_gate.bat的参数(在我的情况下是带空格的完整文件名)

这在Windows 7中适用于我:

 ShortcutTarget: C:\Windows\System32\cmd.exe /C myscript.bat Param1 "Param Two with spaces" StartIn: "C:\Path containing\my script" 

没有尝试过,但作为管理员。 如果myscript.bat包含空格,我不认为这会起作用

我终于弄明白了,以一种允许使用长文件名(短文件名不足以用于我的用例)的方式。 我的解决方案在Win 7,8和10上运行。我认为这是卢克提到缺少的双引号的启发。

这里是:

1.)对于创建到批处理文件的快捷方式,您将其设置为以admin身份运行,请使用以下命令行:

 cmd /s /c ""path_to_batch_file" 

请注意,在命令开始处有两个双引号字符,最后只有一个 ,即使通常在末尾也应该有两个。 但是这是让它工作的诀窍!

2.)在批处理文件中,添加缺少的双引号字符:

 set user_file=%1" 

而已! 下面是一个例子,让你看到它的行动:

1.)在你的桌面上,用下面的内容创建“test.bat”:

 @echo off set user_file=%1" echo The file is: %user_file% pause 

3.)创建批处理文件的快捷方式。 将其设置为以admin身份运行,并为其提供以下命令行:

 cmd /s /c ""%userprofile%\desktop\test.bat" 

4.)将文件拖到快捷方式上。 成功! (我希望…)