2013-05-11 5 views
5

Я пытаюсь выполнить powershell if-else из cmd. Например, чтобы проверить количество файлов, которое имеет «Темп» в его названии в D: привод, я использовал,Как выполнить команды powershell (не из файла ps1) из cmd.exe

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

Это прекрасно работает с PS окон

Но если хотите сделать то же самое from cmd, Как мне это сделать? Я пробовал

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

который не работал, к сожалению.

ответ

16

Просто поместите команду в двойные кавычки:

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

Я также считаю, что здесь не нужен переключатель -NoExit. Этот переключатель запрещает запуск PowerShell после запуска команды. Если вы хотите вернуться к cmd, удалите этот переключатель.

+0

Это правильный ответ на вопрос. Должен быть отмечен как таковой. – villamejia

1

Просто еще одно решение для вас проблемы без использования PowerShell:

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

Это будет печатать только количество файлов или папок на D: что есть «Temp» в их именах. Двойная двоеточие - это просто строка, которая не должна быть на выходе dir /b, поэтому find /v /c "::" подсчитывает все строки вывода dir /b.

0

Решение удвоенной кавычки utapyngo работает.

Также еще один способ для @ utapyngo другого способа сделать это в ЦМДЕ:

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

И Билл: там не должен быть открытие кавычки перед & в вашем первом коде, я думаю?

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 
Смежные вопросы