5

我正在尝试从 cmd 执行 powershell if-else。例如,要检查 D: 驱动器中名称中包含“temp”的文件数,我使用过,

if(($i=ls D:\* | findstr /sinc:Temp).count -ne 0 ) {Write-Host $i}

这在 PS Windows 上运行良好

但是如果想从 cmd 做同样的事情,我该怎么做?我试过了

powershell -noexit if(($i=ls D:\* | findstr /sinc:Temp).count -ne 0 ) {Write-Host $i}

不幸的是,这没有用。

4

5 回答 5

16

只需将命令放在双引号中:

powershell "if(($i=ls D:\* | findstr /sinc:Temp).count -ne 0 ) {Write-Host $i}"

我也认为您在这里不需要 -NoExit 开关。此开关可防止 powershell 在运行命令后退出。如果您想返回cmd,请移除此开关。

于 2013-05-11T05:27:41.183 回答
1

不使用 powershell 的另一种解决方案:

dir /b D:\*Temp* | find /v /c "::"

这将仅打印 D: 上名称中包含“Temp”的文件或文件夹的数量。这里的双冒号只是一个不应出现在输出中的字符串dir /b,因此find /v /c "::"计算输出的所有行dir /b

于 2013-05-11T05:40:03.783 回答
1

我知道这不能回答如何运行命令(其他人已经介绍过),但是当两者都可以单独完成工作时,为什么要结合 cmd 和 powershell?

防爆外壳:

#Get all files on D: drive with temp in FILEname(doesn't check if a foldername was temp)
Get-ChildItem D:\ -Recurse -Filter *temp* | where { !$_.PSIsContainer } | foreach { $_.fullname }

#Check if fullpath includes "temp" (if folder in path includes temp, all files beneath are shown)
Get-ChildItem D:\ -Recurse | where { !$_.PSIsContainer -and $_.FullName -like "*temp*" } | foreach { $_.fullname }

前命令:

#Get all files with "temp" in filename
dir d:\*temp* /s /a:-d /b
于 2013-05-11T11:42:37.903 回答
0

@utapyngo 的双引号解决方案有效。

@utapyngo 的另一种方法是在 cmd 中实现它的另一种方法:

dir /b D:\* | find /c "*Temp*"

对比尔:我猜,在你的第一个代码中 & 之前不应该有一个开头的双引号?

于 2013-05-11T10:50:35.963 回答
-1

powershell -noexit "& "C:\........\run_script.ps1"

看到这些——http: //poshoholic.com/2007/09/27/invoking-a-powershell-script-from-cmdexe-or-start-run/

http://www.leeholmes.com/blog/2006/05/05/running-powershell-scripts-from-cmd-exe/

或 V2

Powershell.exe -File C:\.........\run_script.ps1

于 2013-05-11T05:13:59.987 回答