如何从cmd.exe执行powershell命令(不是来自ps1文件)

时间:2013-05-11 05:11:05

标签: powershell

我正在尝试从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}

不幸的是没有用。

5 个答案:

答案 0 :(得分:16)

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

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

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

答案 1 :(得分:1)

在不使用PowerShell的情况下为您解决问题的另一个解决方案:

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

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

答案 2 :(得分:1)

我知道这并没有回答如何运行命令(其他人已经覆盖了它),但是为什么你们想要将cmd和powershell结合起来,当两者都可以单独完成工作时?

Ex 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 }

Ex cmd:

#Get all files with "temp" in filename
dir d:\*temp* /s /a:-d /b

答案 3 :(得分:0)

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

@ utapyngo另一种在cmd中制作它的方法:

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

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

答案 4 :(得分:-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