Praca z plikami i folderamiWorking with Files and Folders

Nawigować przez dyski środowiska Windows PowerShell i operowanie nimi elementów na nich jest podobny do manipulowania plików i folderów na dyskach fizycznych systemu Windows.Navigating through Windows PowerShell drives and manipulating the items on them is similar to manipulating files and folders on Windows physical disk drives. W tej sekcji omówiono sposób postępowania z określonych plików i folderów zadań manipulowania przy użyciu programu PowerShell.This section discusses how to deal with specific file and folder manipulation tasks using PowerShell.

Wyświetlanie listy wszystkich plików i folderów w folderzeListing All the Files and Folders Within a Folder

Wszystkie elementy można uzyskać bezpośrednio w folderze, za pomocą Get-ChildItem.You can get all items directly within a folder by using Get-ChildItem. Dodaj opcjonalny życie parametru do wyświetlania ukryte lub elementów systemu.Add the optional Force parameter to display hidden or system items. Na przykład to polecenie wyświetla zawartość bezpośredniego systemu Windows PowerShell dysk C (która jest taka sama jak dysk fizyczny w systemie Windows C):For example, this command displays the direct contents of Windows PowerShell Drive C (which is the same as the Windows physical drive C):

Get-ChildItem -Path C:\ -Force

Polecenie wyświetla tylko bezpośrednio zawartych w niej elementów, podobnie jak przy użyciu jego Cmd.exe DIR polecenia lub ls w powłoce systemu UNIX.The command lists only the directly contained items, much like using Cmd.exe's DIR command or ls in a UNIX shell. Aby pokazać zawartych w niej elementów, należy określić -Recurse również parametr.In order to show contained items, you need to specify the -Recurse parameter as well. (To może potrwać bardzo długo). Aby wyświetlić listę wszystkich elementów na dysku C:(This can take an extremely long time to complete.) To list everything on the C drive:

Get-ChildItem -Path C:\ -Force -Recurse

Get-ChildItem można filtrować elementy z jego ścieżki, filtru, Include, i wykluczyć parametrów, ale te są zwykle tylko na podstawie nazwy.Get-ChildItem can filter items with its Path, Filter, Include, and Exclude parameters, but those are typically based only on name. Można wykonać złożone filtrowanie na podstawie innych właściwości elementów za pomocą Where-Object.You can perform complex filtering based on other properties of items by using Where-Object.

Poniższe polecenie umożliwia znalezienie wszystkich plików wykonywalnych w folderze Program Files, który ostatniej modyfikacji po 1 października 2005 i które nie są mniejsze niż 1 megabajt ani większa niż 10 megabajtów:The following command finds all executables within the Program Files folder that were last modified after October 1, 2005 and which are neither smaller than 1 megabyte nor larger than 10 megabytes:

Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe | Where-Object -FilterScript {($_.LastWriteTime -gt '2005-10-01') -and ($_.Length -ge 1mb) -and ($_.Length -le 10mb)}

Kopiowanie plików i folderówCopying Files and Folders

Kopiowanie wykonuje się za pomocą Copy-Item.Copying is done with Copy-Item. Następujące polecenie tworzy kopię zapasową C:\boot.ini do folderu C:\boot.bak:The following command backs up C:\boot.ini to C:\boot.bak:

Copy-Item -Path C:\boot.ini -Destination C:\boot.bak

Jeśli plik docelowy już istnieje, próba skopiowania zakończy się niepowodzeniem.If the destination file already exists, the copy attempt fails. Aby zastąpić istniejące docelowego, użyj życie parametru:To overwrite a pre-existing destination, use the Force parameter:

Copy-Item -Path C:\boot.ini -Destination C:\boot.bak -Force

To polecenie działa nawet wtedy, gdy lokalizacją docelową jest tylko do odczytu.This command works even when the destination is read-only.

Kopiowanie folderu działa tak samo.Folder copying works the same way. To polecenie powoduje skopiowanie folderu C:\temp\test1 do nowego folderu C:\temp\rekursywnie DeleteMe:This command copies the folder C:\temp\test1 to the new folder C:\temp\DeleteMe recursively:

Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe

Ponadto można kopiować zaznaczenia elementów.You can also copy a selection of items. Polecenie kopiuje wszystkie pliki .txt zawarte w dowolnym miejscu w c:\danych do folderu c:\temp\tekst:The following command copies all .txt files contained anywhere in c:\data to c:\temp\text:

Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text

Można nadal używać innych narzędzi do wykonywania kopii systemu plików.You can still use other tools to perform file system copies. XCOPY ROBOCOPY i COM obiekty, takie jak Scripting.FileSystemObject, wszystkie pracy w programie Windows PowerShell.XCOPY, ROBOCOPY, and COM objects, such as the Scripting.FileSystemObject, all work in Windows PowerShell. Na przykład można użyć Host skryptów systemu Windows Scripting.FileSystem COM klasa do tworzenia kopii zapasowych C:\boot.ini do folderu C:\boot.bak:For example, you can use the Windows Script Host Scripting.FileSystem COM class to back up C:\boot.ini to C:\boot.bak:

(New-Object -ComObject Scripting.FileSystemObject).CopyFile('C:\boot.ini', 'C:\boot.bak')

Tworzenie plików i folderówCreating Files and Folders

Tworzenie nowych elementów działa tak samo na wszystkich dostawców środowiska Windows PowerShell.Creating new items works the same on all Windows PowerShell providers. Jeśli dostawca programu Windows PowerShell zawiera więcej niż jeden typ elementu — na przykład dostawcy środowiska Windows PowerShell w systemie plików rozróżnia katalogów i plików — należy określić typ elementu.If a Windows PowerShell provider has more than one type of item—for example, the FileSystem Windows PowerShell provider distinguishes between directories and files—you need to specify the item type.

To polecenie tworzy nowy folder C:\temp\nowego folderu:This command creates a new folder C:\temp\New Folder:

New-Item -Path 'C:\temp\New Folder' -ItemType Directory

To polecenie tworzy nowy pusty plik C:\temp\nowy Folder\plik.txtThis command creates a new empty file C:\temp\New Folder\file.txt

New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File

Usunięcie wszystkich plików i folderów w folderzeRemoving All Files and Folders Within a Folder

Można usunąć zawartych w niej elementów przy użyciu Usuń element, ale pojawi się monit o potwierdzenie usunięcia, jeśli element zawiera coś innego.You can remove contained items using Remove-Item, but you will be prompted to confirm the removal if the item contains anything else. Na przykład, jeśli próba usunięcia folderu C:\temp\DeleteMe, który zawiera inne elementy programu Windows PowerShell monituje o potwierdzenie przed usunięciem folderu:For example, if you attempt to delete the folder C:\temp\DeleteMe that contains other items, Windows PowerShell prompts you for confirmation before deleting the folder:

Remove-Item -Path C:\temp\DeleteMe

Confirm
The item at C:\temp\DeleteMe has children and the -recurse parameter was not
specified. If you continue, all children will be removed with the item. Are you
sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):

Jeśli nie zostanie wyświetlony monit o poszczególnych elementów zawartych w niej, określ Recurse parametru:If you do not want to be prompted for each contained item, specify the Recurse parameter:

Remove-Item -Path C:\temp\DeleteMe -Recurse

Mapowanie folderu lokalnego jako dostępny dysk systemu WindowsMapping a Local Folder as a Windows Accessible Drive

Folder lokalny, można również mapować przy użyciu subst polecenia.You can also map a local folder, using the subst command. Poniższe polecenie tworzy dysk lokalny, który P: umieszczone w lokalnym katalogu Program Files:The following command creates a local drive P: rooted in the local Program Files directory:

subst p: $env:programfiles

Tak jak w przypadku dysków sieciowych dyski mapowane w przy użyciu programu Windows PowerShell subst są od razu widoczne powłoki Windows PowerShell.Just as with network drives, drives mapped within Windows PowerShell using subst are immediately visible to the Windows PowerShell shell.

Odczytywanie pliku tekstowego do tablicyReading a Text File into an Array

Jest jednym z formatów magazynu częściej stosowana w przypadku danych tekstowych w pliku z osobnych wierszach traktowane jako elementy danych distinct.One of the more common storage formats for text data is in a file with separate lines treated as distinct data elements. Pobrania zawartości polecenia cmdlet można odczytać całego pliku w jednym kroku, jak pokazano poniżej:The Get-Content cmdlet can be used to read an entire file in one step, as shown here:

PS> Get-Content -Path C:\boot.ini
[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional"
 /noexecute=AlwaysOff /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=" Microsoft Windows XP Professional
with Data Execution Prevention" /noexecute=optin /fastdetect

Get-Content już traktuje dane odczytane z pliku jako tablicę o jeden element w jednym wierszu zawartości pliku.Get-Content already treats the data read from the file as an array, with one element per line of file content. Można to potwierdzić, sprawdzając długość zwrócony zawartości:You can confirm this by checking the Length of the returned content:

PS> (Get-Content -Path C:\boot.ini).Length
6

To polecenie jest najbardziej przydatny w przypadku uzyskiwania listy informacji w programie Windows PowerShell bezpośrednio.This command is most useful for getting lists of information into Windows PowerShell directly. Na przykład może przechowywać listę nazw komputerów lub adresy IP w pliku C:\temp\domainMembers.txt o nazwie jeden w każdym wierszu pliku.For example, you might store a list of computer names or IP addresses in a file C:\temp\domainMembers.txt, with one name on each line of the file. Można użyć pobrania zawartości można pobrać zawartości pliku i umieść je w zmiennej $Computers:You can use Get-Content to retrieve the file contents and put them in the variable $Computers:

$Computers = Get-Content -Path C:\temp\DomainMembers.txt

$Computers jest teraz tablicę zawierającą nazwę komputera w każdym elemencie.$Computers is now an array containing a computer name in each element.