“%” (Phần trăm) làm gì trong PowerShell?


106

Có vẻ như hoạt động% bắt đầu các khối tập lệnh sau đường dẫn, mặc dù about_Script_Blocks cho biết% không cần thiết.

Tất cả đều hoạt động tốt.

get-childitem | % { write-host $_.Name }

{ write-host 'hello' }

% { write-host 'hello' }

Nhưng khi chúng ta thêm một khối tập lệnh vào sau đường dẫn, chúng ta cần có% trước.

get-childitem | { write-host $_.Name }

2
Bạn đã thử tìm kiếm "dấu phần trăm quyền hạn"
PeeHaa

17
Bạn cũng có thể đã thử Get-Help%
mjolinor

7
@mjolinor Thật hữu ích. Tôi không biết tôi có thể nhận được trợ giúp về các biểu tượng. Tôi thấy rằng chúng ta cũng có thể tra cứu $ _ với get-help. Thật tuyệt!
Shaun Luttin

1
Nó cũng là một toán tử mô-đun! chỉ không trong bối cảnh này
Cole9350

41
@PeeHaa Đề xuất của bạn dẫn đến đây.
NiloCK

Câu trả lời:


144

Khi được sử dụng trong ngữ cảnh của một lệnh ghép ngắn (chẳng hạn như ví dụ của bạn), nó là một bí danh cho ForEach-Object:

> Get-Alias -Definition ForEach-Object

CommandType     Name                                                Definition
-----------     ----                                                ----------
Alias           %                                                   ForEach-Object
Alias           foreach                                             ForEach-Object

Khi được sử dụng trong ngữ cảnh của một phương trình, đó là toán tử mô-đun :

> 11 % 5

1

và là toán tử mô đun, %cũng có thể được sử dụng trong toán tử gán ( %=):

> $this = 11
> $this %= 5
> $this

1

2
Tôi sẽ đánh dấu đây là câu trả lời khi nó cũng chứa vai trò% như một toán tử mô-đun trong các ngữ cảnh khác nhau.
Shaun Luttin

1
Thêm ví dụ điều hành phương trình và phân công
Kohlbrr

17
Trong trường hợp của Foreach-Object, tôi khuyên bạn không nên sử dụng ký hiệu "%" - nó khiến mọi người khó đọc / duy trì mã của bạn hơn - đặc biệt là những người mới sử dụng PS. Hãy đối mặt với nó, càng nhiều người chọn PS thì càng tốt.
Simon Catlin

1
Tôi có thể tìm ý nghĩa ForEach-Object ở đâu trong tài liệu chính thức về MSDN?
rightfold

Tôi không đồng ý với Simon Catlin, theo logic đó, tất cả chúng ta nên sử dụng assembly vì phần còn lại chỉ là đường cú pháp
reggaeguitar

16

Một bài đăng PowerShell - Ký tự đặc biệt và mã thông báo cung cấp mô tả về nhiều biểu tượng bao gồm%

% (percentage)

1. Shortcut to foreach.
Task: Print all items in a collection.
Solution.
... | % { Write-Host $_ }

2. Remainder of division, same as Mod in VB.
Example:
5 % 2

7
@ShaunLuttin: Giá trị là một liên kết, trong đó mô tả nhiều ký tự đặc biệt bao gồm%
Michael Freidgeim

Về mặt kỹ thuật, nó là một bí danh cho ForEach-Object. ForEachcũng là một bí danh cho ForEach-Object- ngoại trừ khi được sử dụng ở đầu câu lệnh, trong đó nó là từ khóa điều khiển vòng lặp (như while).
mwfearnley,

4

%có thể thay thế mà sẽ không hoạt động nếu không có hoặc .Get-ChildItem | ForEach-Object { write-host $_.Name }%ForEach-Object

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.