我有一个批处理脚本,可以进行大量的审核。我运行此脚本的文件夹放在我的桌面上,其中登录的用户名为"医生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
我在批处理文件中写什么来解决这个问题?
答案 0 :(得分:2)
当您按照自己的方式运行PowerShell时(与使用参数-Command
基本相同),双引号字符串的内容将被解释为PowerShell语句(或PowerShell语句列表)。基本上会发生什么:
输入命令:
powershell.exe -ExecutionPolicy Bypass "%~dp0\Audit_folders_and_regkeys.ps1"
CMD展开位置参数%~dp0
:
powershell.exe -ExecutionPolicy Bypass "c:\user\Doctor a\Desktop\script\Audit_folders_and_regkeys.ps1"
CMD启动powershell.exe
并将命令字符串传递给它(请注意删除的双引号):
c:\user\Doctor a\Desktop\script\Audit_folders_and_regkeys.ps1
PowerShell看到没有双引号的语句,并尝试使用参数c:\user\Doctor
执行(不存在的)命令a\Desktop\script\Audit_folders_and_regkeys.ps1
。
处理此问题的最佳方法是使用参数-File
,如评论中建议的@PetSerAl:
powershell.exe -ExecutionPolicy Bypass -File "%~dp0\Audit_folders_and_regkeys.ps1"
否则,您必须在命令字符串中放置嵌套引号,以补偿在传递参数时删除的引号:
powershell.exe -ExecutionPolicy Bypass "& '%~dp0\Audit_folders_and_regkeys.ps1'"
请注意,在这种情况下,您还需要使用调用运算符(&
),否则PowerShell只会回显路径字符串。