毫无疑问,我做了一些非常简单的错误,但我无法弄清楚。我不是专家,我正在写我的论文,并且正在使用带有一系列 PowerShell 指令的 .bat 文件来转换和移动文件。有效的现有文件在所有子文件夹中执行解析器 .exe:
powershell.exe -command "& {$start_path = 'C:\folder'; Get-ChildItem $start_path -Recurse -Directory | ForEach-Object {Set-Location $_.FullName | ".\OpenWeather6to6.exe"};}
c:\folder
是占位符,OpenWeather6to6 只是我给它起的名字。
现在的问题!我有另一个解析器,它生成我想用相同的 PowerShell 行运行的 SQL 脚本。如果通过资源管理器或 CMD 手动启动,这两个解析器都可以正常工作。但是第二个不会通过 .bat 运行?这是完全相同的脚本,但带有OpenWeatherSQL.exe
.
.\OpenWeatherSQL.exe : The term '.\OpenWeatherSQL.exe' 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:156
+ ... | ForEach-Object {Set-Location $_.FullName | .\OpenWeatherSQL.exe};}
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (.\OpenWeatherSQL.exe:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
它可能与.exe的类型有关吗?它们都来自同一个源文件,我用 C++ 的 CodeBlocks 编写了它们,它们做的事情几乎完全相同。我很困惑。
PS 我知道最好通过 .ps1 脚本运行它们。然而,在其他地方,我将 PS 工作与其他更容易运行的功能结合起来.bat
,它的代码是否好并不重要,它只需要做这几件事,没有人会再看它或再次使用它; 只需要克服这一点。
我不知道为什么,但它现在有效。据我所知,命令是一样的??我添加了完整的路径,我不明白为什么这会比占位符更好,但无论如何,以及不起作用的 .exe 的名称。
唯一改变的是我编辑了解析器的代码并重新编译了它。一定是PowerShell无法以某种方式运行其中包含特定代码的可执行文件;虽然我改变的只是一些输出格式的细节。