2013-05-11 29 views
5

Tôi đang cố gắng thực hiện powershell nếu-else từ cmd. Ví dụ để kiểm tra số lượng file, có "tạm thời" trong tên của nó trong D: ổ đĩa, tôi đã sử dụng,Làm thế nào để thực hiện lệnh powershell (không phải từ tệp ps1) từ cmd.exe

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

này hoạt động tốt từ PS cửa sổ

Nhưng nếu muốn làm như vậy từ cmd, Làm thế nào để tôi làm điều đó? Tôi đã thử

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

không hoạt động không may.

Trả lời

16

Chỉ cần đặt lệnh trong dấu ngoặc kép:

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

Tôi cũng nghĩ rằng bạn không cần chuyển đổi -Không có chuyển đổi tại đây. Chuyển đổi này ngăn chặn quyền hạn thoát khỏi sau khi chạy lệnh. Nếu bạn muốn quay lại cmd, hãy xóa công tắc này.

+0

Đây là câu trả lời đúng cho câu hỏi. Nên được đánh dấu như vậy. – villamejia

1

Chỉ cần một giải pháp cho bạn vấn đề mà không sử dụng PowerShell:

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

này sẽ in chỉ số lượng tập tin hoặc thư mục trên D: có "Temp" trong tên của họ. Dấu hai chấm ở đây chỉ là một chuỗi không được ở đầu ra của dir /b, do đó, find /v /c "::" đếm tất cả các dòng đầu ra của dir /b.

0

@ utapyngo của giải pháp báo giá gấp đôi hoạt động.

Cũng một cách khác cho @ utapyngo là một cách khác để làm cho nó trong cmd:

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

Và để Bill: không nên có một dấu nháy kép mở trước & trong mã đầu tiên của bạn, tôi đoán?

1

Tôi biết điều này không trả lời làm thế nào để chạy lệnh (những người khác đã bao phủ nó), nhưng tại sao bạn muốn kết hợp cmd và powershell, khi cả hai có thể thực hiện công việc một mình?

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 
Các vấn đề liên quan