创建一个批处理文件来执行多行Powershell脚本而不创建PS文件

ztmd8pv5  于 2023-05-17  发布在  Shell
关注(0)|答案(3)|浏览(286)

我创建了一个批处理文件,其中包含下面的代码行,当执行批处理文件时,不会创建新的文件夹。我不想创建新的.ps1文件并将代码放入其中。

START /W powershell -noexit $FolderPath= "C:\TestFolder"

#Check if Folder exists
If(!(Test-Path -Path $FolderPath))
{
New-Item -ItemType Directory -Path $FolderPath
Write-Host "New folder created successfully!" -f Green
}
mznpcxlj

mznpcxlj1#

正如Stephan已经评论过的,你不能在批处理脚本中运行powershell代码。实际上没有办法做到这一点,因为这两个系统使用完全不同的语言,具有不同的安全性等。
因此,您的选择是:
1 -使用PowerShell,在这种情况下,您需要将该代码添加到.ps1文件并从那里运行它。
2 -使用Batch,在这种情况下,您需要更改代码以使用batchscript方法来执行所需操作。因此,在您的示例中,您需要将该代码替换为以下batchscriptp代码:

set FolderPath="c:\TestFolder\"
if not exist %FolderPath% (
  mkdir %FolderPath%
  echo "New folder created successfully!"
)

这将做同样的事情(减去绿色文本)。

7tofc5zh

7tofc5zh2#

根据我之前的评论,这里有一个非常快速的例子,你发布了,(加上创建一个额外的目录,以便更好地向你展示机制),直接从批处理文件运行,而不需要创建.ps1文件:

@Echo Off
Call :PS "C:\TestFolder"
Call :PS "C:\AnotherTestFolder"
Exit /B

:PS
Start "" %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -NoExit -Command "If(!(Test-Path -Path '%~1')){New-Item -ItemType Directory -Path '%~1'; Write-Host 'New folder created successfully!' -F Green}"
  • 还请记住我的注解,即无论是否创建了目录,都会向主机写入成功消息。*
pw136qt2

pw136qt23#

你可以按照这个答案中的规则将PowerShell代码写入Batch .bat文件。例如:

powershell  ^
   $FolderPath= 'C:\TestFolder';  ^
   If(!(Test-Path -Path $FolderPath)) {  ^
      New-Item -ItemType Directory -Path $FolderPath;  ^
      Write-Host 'New folder created successfully!' -f Green  ^
   }

您可以在this thread中查看大型PowerShell部分的.BAT文件示例,甚至可以查看完整的动画游戏,如彩色的VIBORAS.BAT(蛇)游戏...

相关问题