我正在尝试从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}
不幸的是没有用。
答案 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