我有以下脚本:
@echo off
title cpm
color e
powershell -command "& cls; `
Write-Host write anything:; `
echo "hello""
它不让我以这种方式执行它,我该如何转义空白行以便可以执行它?我尝试过使用 \ 和 ^^,但都不行,如果我把它放在一行中,它运行完美
答案1
根据我在你的另一篇文章中的评论,我提供了反馈。这就是我的意思。
下面将按如下所示进行工作...
@echo off
cls
::
title cpm
color e
::
::
cls
PowerShell -Command 'Hello from PowerShell^';^
Get-Date^;^
(Get-Process)[0]
::
@echo off
echo "hello from cmd"
:: Begin Results =========================================
:: D:\Scripts>PowerShell -Command 'Hello from PowerShell';Get-Date;(Get-Process)[0]
:: Hello from PowerShell
::
:: Saturday, August 6, 2022 00:30:14
::
:: Id : 10508
:: Handles : 224
:: CPU :
:: SI : 0
:: Name : aesm_service
::
::
::
:: "hello from cmd"
:: End Results =========================================
...但是,如果您尝试在“Get-Process”上使用 Select-Object 命令,它将失败。同样,您尝试和触发的 PS 命令越复杂,您遇到的问题(格式和执行)就越多。
因此,我无法理解为什么要使用嵌入 PS 代码的 bat/cmd,但同样,只需编写 .ps1 并通过 PS 从 bat/cmd 文件中调用它即可。您将拥有更多的灵活性和可读性选项,以及更少的麻烦和不合理的代码语句。
答案2
我不确定您的意图,但命令行 Powershell 命令有点不对。我相信您想要类似下面的东西,但您可能希望将清除屏幕调用移到"& cls"
下面echo "hello"
。此外,清除屏幕也是命令行的固有功能,只需使用cls
(您不需要使用 Powershell):
@echo off
title ControlMantis
color e
set RUTATEMP="%temp%\pass.pass"
powershell -command "& cls";
powershell -command Write-Host "write anything:";
echo "hello"
您还可以将这些 PS 命令链接在一起:
powershell -command "& cls"; Write-Host "write anything 1:"; Write-Host "write anything 2:"; Write-Host "write anything 3:";
答案3
在编写批处理脚本时,可以使用^
(就像在编辑问题之前所做的那样)进行行延续。删除"
在 Powershell 命令开头添加的。"
在 Write-Host cmdlet 之后添加,因为字符串中有一个空格。
@echo off
title cpm
color e
powershell -command cls; ^
Write-Host "write anything:"; ^
echo "hello"