运行批处理命令时的路径无效

时间:2016-03-21 15:52:57

标签: powershell batch-file

我有一个批处理脚本,可以进行大量的审核。我运行此脚本的文件夹放在我的桌面上,其中登录的用户名为"医生A" (运行命令的路径是c:\user\Doctor a\Desktop\script\test.bat)。

运行som批处理命令后,我尝试使用以下行启动PowerShell脚本:

powershell.exe -ExecutionPolicy Bypass "%~dp0\Audit_folders_and_regkeys.ps1"

当我运行此命令时,出现错误

The term 'C:\Users\Doctor' is not recognized as the name of a cmdlet, function,
script file, or operable program. Check the spelling of the name, or if a path
was included, verify that the path is correct and try again.
At line:1 char:16
+ C:\Users\Doctor <<<<  A\Desktop\CyperPilot_Audit_Conf_External_Network\CyperPilot_Audit_Conf_External_Network\\Audit_folders_and_regkeys.ps1
     + CategoryInfo          : ObjectNotFound: (C:\Users\Doctor:String) [], CommandNotFoundException
     + FullyQualifiedErrorId : CommandNotFoundException

似乎它不会超过C:\Users\Doctor我在批处理文件中写什么来解决这个问题?

1 个答案:

答案 0 :(得分:2)

当您按照自己的方式运行PowerShell时(与使用参数-Command基本相同),双引号字符串的内容将被解释为PowerShell语句(或PowerShell语句列表)。基本上会发生什么:

  1. 输入命令:

    powershell.exe -ExecutionPolicy Bypass "%~dp0\Audit_folders_and_regkeys.ps1"
    
  2. CMD展开位置参数%~dp0

    powershell.exe -ExecutionPolicy Bypass "c:\user\Doctor a\Desktop\script\Audit_folders_and_regkeys.ps1"
    
  3. CMD启动powershell.exe并将命令字符串传递给它(请注意删除的双引号):

    c:\user\Doctor a\Desktop\script\Audit_folders_and_regkeys.ps1
    
  4. PowerShell看到没有双引号的语句,并尝试使用参数c:\user\Doctor执行(不存在的)命令a\Desktop\script\Audit_folders_and_regkeys.ps1

  5. 处理此问题的最佳方法是使用参数-File,如评论中建议的@PetSerAl:

    powershell.exe -ExecutionPolicy Bypass -File "%~dp0\Audit_folders_and_regkeys.ps1"
    

    否则,您必须在命令字符串中放置嵌套引号,以补偿在传递参数时删除的引号:

    powershell.exe -ExecutionPolicy Bypass "& '%~dp0\Audit_folders_and_regkeys.ps1'"
    

    请注意,在这种情况下,您还需要使用调用运算符(&),否则PowerShell只会回显路径字符串。