问题:将本地路径传递给在文件夹名称中包含方括号的 powershell.exe 意味着 powershell 找不到传递给它的脚本文件。
选项 1:使用 powershell -File .\MyScript.ps1
选项 2:使用 powershell %CD%\MyScript.ps1
我不清楚为什么 powershell 找不到您的路径,但 -File 命令行参数似乎可以解决它。与使用 %CD% 批处理文件属性而不是 '.' 一样。
如果我创建一个包含单行的文件“HelloWorld.ps1”:
Write-Output "Hello World"
在一个文件夹中
c:\work\joel\scream
并运行命令:
C:\work\joel\scream>powershell .\HelloWorld.ps1
然后我得到预期的输出(Hello World)。
如果我将文件夹重命名为 [scream],它会失败。
cd ..
ren scream [scream]
方括号是范围运算符。
C:\work\joel\[scream]>powershell .\HelloWorld.ps1
现在产生:
.\helloworld.ps1 :术语“.\helloworld.ps1”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。
但是运行:
C:\work\joel\[scream]>powershell -File .\HelloWorld.ps1
给出预期的输出(Hello World)。
powershell /?
<snip/>
-File
Runs the specified script in the local scope ("dot-sourced"), so that the
functions and variables that the script creates are available in the
current session. Enter the script file path and any parameters.
File must be the last parameter in the command, because all characters
typed after the File parameter name are interpreted
as the script file path followed by the script parameters.
我不清楚 powershell 或命令提示符/批处理脚本是否误解了路径,但我可以说,虽然:
C:\work\joel\[scream]>powershell .\HelloWorld.ps1
不起作用:
C:\work\joel\[scream]>powershell %CD%\helloworld.ps1
确实有效。所以它似乎与'.'的扩展有关。进入当前路径。