Hur man kopierar eller flyttar filer i PowerShell

15 maj 2021 1201 Visningar

Undrar du hur man kopierar eller flyttar filer med PowerShell?





Denna S Zone lär dig hur du använder PowerShell för att kopiera en fil med Get-ChildItem och Copy-Item Cmdlets. Guiden täcker tre sätt att kopiera filer med PowerShell.



Slutligen kommer du också att lära dig hur du flyttar filer med PowerShell. Till skillnad från att kopiera en fil, när du flyttar en fil, raderas filen från dess källa.

Bläddra bland inläggsämnen



Hur man kopierar en enskild fil med PowerShell

Hur man kopierar en enskild fil med PowerShell

I det här första avsnittet kommer jag att lära dig hur du kopierar en enda fil med PowerShell. Oavsett om du kopierar en enskild fil eller alla filer i en mapp – PowerShell-kommandot har 2 delar.



I den första delen av kommandot använder du Get-ChildItem Cmdlet till lista filen. Sen du rör utgången av Get-ChildItem kommando till Copy-Item Cmdlet.

Hur man listar en fil med Get-ChildItem

Som jag nämnde i inledningen av det här avsnittet, innan du kopierar en fil med PowerShell, måste du först lista det med Get-ChildItem .



I det här exemplet vill jag kopiera filen som heter Byte Count Tool, från dess nuvarande mapp till D:G-DriveWork ToolsProducts Portal 2.



Hur man kopierar en enskild fil med PowerShell

För att lista textfilen kör jag kommandot nedan:

|_+_|

Det snabbaste sättet att köra kommandot är att placera en PowerShell-prompt sida vid sida om mappen med filen. Gå sedan in Get-ChildItem i PowerShell-prompten – tryck på mellanslagstangenten för att lägga till ett mellanslag.

Dra sedan filen från mappen till PowerShell-prompten.

Slutligen, för att lista filegenskaperna, med PowerShell-prompten öppen, tryck på enter-tangenten.

Hur man piper utmatningen av Get-ChildItem Till Copy-Item

När du har listat egenskaperna för filen du vill kopiera, skicka den till Copy-Item . Sedan, på Copy-Item del av kommandot, ange mappen du vill kopiera filen till.

Här är PowerShell-kommandot för att kopiera en fil:

|_+_| Jag lade till citattecken runt mappsökvägen eftersom den har mellanslag däremellan.

När du trycker på enter, kommer kommandot att köras – filen kommer att kopieras till den angivna destinationen

Hur man kopierar alla filtyper i en mapp med PowerShell

Hur man kopierar alla filtyper i en mapp med PowerShell

I det sista avsnittet av den här guiden visade jag dig hur du kopierar en enda fil med PowerShell. Det kan dock finnas situationer där du behöver kopiera alla filtyper i en mapp.

I det här avsnittet kommer du att lära dig hur du kopierar alla filer med ett specifikt filtillägg från en mapp till en annan mapp. Du kanske till exempel vill kopiera alla filer med filtillägget .log från C:Windows till en annan mapp.

Denna process liknar att kopiera en enskild fil men det kräver ytterligare steg. Specifikt, för att kopiera mer än en fil med PowerShell, måste vi skapa ett enkelt skript.

Den första delen av skriptet involverar att använda Get-ChildItem Cmdlet för att lista de filer du vill kopiera. Sedan, i den andra delen av skriptet, kommer du att använda För varje loop för att gå igenom listan med filer.

Slutligen, inom För varje loop, kommer du att inkludera Copy-Item Cmdlet för att kopiera var och en av filerna till önskad destination.

För att göra det enkelt för dig att förstå det enkla PowerShell-skriptet vi håller på att skapa, kommer jag att dela upp det här avsnittet i två undersektioner.

Hur man listar alla filtyper med Get-ChildItem

I det här exemplet vill jag kopiera alla filer med filtillägget .log från C:Windows till D:Log Files. Men som redan antytts ovan är det första steget att använda Get-ChildItem Cmdlet för att lista alla filer med filtillägget .log.

Återigen, för att göra det enkelt för dig att förstå det sista kommandot, låt oss börja från grunderna. Låt oss först lista alla filer och mappar i källmappen - med kommandot nedan:

|_+_|

Det sista kommandot visar både filer och mappar.

Hur man kopierar alla filtyper i en mapp med PowerShell

Vi vill dock använda PowerShell för att kopiera endast filer med filtillägget .log. Så vi kommer att lägga till ytterligare ett kommando som visar dessa filer enbart.

Ta en ny titt på den sista skärmdumpen. Den sista kolumnen heter Namn. Detta är namnet på filen eller mappen. Vi kommer att använda denna information inom kort.

För att uppnå detta mål kommer vi att skicka utdata från Get-ChildItem C:Windows till en Var-Objekt kommando. Här är kommandot som gör det tricket.

|_+_| Kommer du ihåg att jag sa åt dig att notera kolumnen Namn från resultatet av Get-ChildItem C:Windows? I PowerShell använder du $_. automatisk variabel för att referera till objekt. I kommandot ovan sa jag till PowerShell att endast visa objekt med ett namn som inkluderar '.log'. Slutligen skickade jag resultatet till Select-Object Cmdlet och sa åt den att visa Fullständiga namn av filen. De Fullständiga namn inkluderar filsökvägen.

Här är resultatet av kommandot ovan. Vi har tagit bort all annan information – vi har nu bara de filer vi behöver kopiera. Vi är dock inte klara med den här delen – innan du går vidare till den sista delen av att skapa skriptet måste vi lägga till en bit till.

Den biten är att lägga till det sista kommandot till en variabel – jag kallar variabeln loggfiler . Här är kommandot som gör det jobbet.

|_+_|

Den enda skillnaden mellan detta kommando och det sista är $logfiles = bit. Detta talar om för PowerShell att spara utdata från Get-ChildItem C:Windows | Where-Object { $_.Name -like '*.log' } | Välj-Objekt Fullständigt Namn – i en variabel som kallas loggfiler .

Till skillnad från det senaste kommandot, om jag nu kör det senaste kommandot, kommer det inte att visa något resultat. Anledningen till detta är att utdata nu sparas i variabeln istället för att visa den på konsolen.

Hur man kopierar flera filer med PowerShell För varje slinga

I den här sista delen av att skapa vårt manus kommer vi att introducera det magiska För varje slinga . Om du vill läsa mer om ForEach-loopen och dess syntax, klicka på ForEach-loopen.

I allmänhet ser syntaxen för en ForEach-loop ut så här:

|_+_|

Så om vi tillämpar detta på vår situation – med tanke på att vi vill kopiera alla filer med tillägget .log med PowerShell – kommer vårt ForEach-kommando att se ut så här:

|_+_|

Låt oss slutligen kombinera detta sista kommando med Get-ChildItem från det sista avsnittet. Det slutliga skriptet kommer att se ut så här:

|_+_| Notera hur jag inkluderade . Fullständiga namn i $logfiles-delen av ForEach-loopen. Detta beror på att jag använde Select-Object Cmdlet i den första delen av kommandot. Om du lägger till den biten elimineras kolumnnamnet. Annars kommer kommandot att returnera fel.

Om du kopierar ovanstående kommandon till PowerShell ISE och sparar det, har du ditt skript! Du kan dock fortfarande köra de individuella kommandona som visas i skärmdumpen nedan.

Kommandot ovan körs och PowerShell återgår till sin prompt som om ingenting hade hänt. Men när du öppnar målmappen du angav i ForEach loop-biten i kommandot, skulle PowerShell-kommandot ha kopierat filerna – se skärmdumpen nedan...

Hur man kopierar alla filtyper i en mapp och alla undermappar

Hur man kopierar alla filtyper i en mapp och alla undermappar

Hittills har den här guiden täckt stegen för att kopiera en enda fil med PowerShell. Dessutom har guiden också täckt steg för att kopiera flera filer från en mapp.

Vi har täckt några fantastiska PowerShell-filkopieringssituationer.

Det finns dock situationer när du behöver kopiera alla filer med ett specifikt filtillägg från en mapp och alla dess undermappar .

Om jag fortsätter med mitt senaste exempel, säg att jag vill kopiera alla filer med filtillägget .log från C:Windows mapp och alla dess undermappar – jag kommer helt enkelt att ändra Get-ChildItem del av detta kommando:

|_+_|

För att få Get-ChildItem kommandot för att lista alla filer med filtillägget .log i C:Windows och alla dess undermappar – jag kommer att lägga till en Get-ChildItem kommandoparameter anropad Återfall .

Med detta i åtanke kommer mitt nya kommando nu att se ut så här:

|_+_|

För att driva min poäng hem kommer jag att köra kommandot Get-ChildItem utan $logfiles = bit. Kommandot returnerar fel eftersom jag försöker komma åt filer som jag inte har behörighet att komma åt.

Hur man kopierar alla filtyper i en mapp och alla undermappar

För att åtgärda det här felet, låt mig försöka öppna PowerShell som administratör. Nu, när jag kör samma kommando, returnerar det några resultat.

Till skillnad från det senaste kommandot som inte inkluderade Återfall parameter, returnerar detta kommando mycket fler filer. Detta beror på att kommandot returnerade alla filer i mappen på översta nivån samt filer i alla dess undermappar.

Hur man kopierar alla filtyper i en mapp och alla undermappar

Slutligen, för att kopiera alla filer i en mapp och alla dess undermappar med PowerShell, kör ett kommando som liknar kommandot nedan.

Kom ihåg att ändra dina mappar. Jag har anpassat sökvägarna till käll- och målmapparna för att göra det enkelt för dig att upptäcka och ändra dem till dina. |_+_| Om du vill spara det här kommandot i PowerShell ISE och köra det som ett skript, kanske du vill lägga till variabeln ErrorAction till kommandot Get-ChildItem. Med variabeln ErrorAction kommer det slutliga skriptet att se ut så här: |_+_|

Hur man flyttar filer i PowerShell

Förutom att kopiera filer kan PowerShell också Flytta filer. Skillnaden är att när du flyttar en fil tas den bort från dess källmapp.

Så om kopiering och flytt av filer är ungefär samma, betyder det att du kan använda samma kommandon som vi har använt i den här guiden med en liten modifiering.

För att göra det enkelt har jag listat alla kommandon som täcks av den här guiden hittills. Sedan tillhandahåller jag för varje kommando flytta filen motsvarighet till kommandot.

Innan jag fortsätter är det viktigt att nämna att den enda skillnaden i kommandona är Copy-Item-biten. Istället för att använda Copy-Item för att kopiera en fil, för att flytta en fil, kommer du att använda Flytta objekt .

Hur man flyttar en enskild fil med PowerShell

Kommandot för att kopiera en enskild fil i PowerShell är:

|_+_|

Men för att flytta filen, använd det här kommandot istället:

|_+_|

Hur man flyttar alla filtyper i en mapp med PowerShell

Som redan diskuterats ovan, här är kommandona för att kopiera alla filtyper i en mapp.

|_+_|

Å andra sidan, för att flytta filerna, använd det här kommandot istället.

LÅT BLI kör kommandot nedan utan att ändra C:Windows del. Om du kör kommandot kan viktiga operativsystemfiler flyttas och din dator kan bli instabil. Dessa kommandon är endast i illustrationssyfte! |_+_|

Hur man flyttar alla filtyper i en mapp och alla undermappar

Slutligen kopierar kommandona nedan alla filer i källmappen och alla dess undermappar.

|_+_|

För att flytta filerna, använd det här kommandot istället.

|_+_|

Jag hoppas att du tyckte att metoderna för att kopiera och flytta filer med PowerShell som diskuteras i den här guiden var användbara.

not 4 anpassade rom

Om du tyckte att det var användbart, vänligen rösta Ja till frågan Var detta inlägg användbar nedan.

Men om ingen av metoderna fungerade för dig eller om du behövde något annat än de diskuterade metoderna, klicka Nej till frågan Var detta inlägg användbar nedan. Ge oss sedan ytterligare information. Vi granskar våra läsares feedback och uppdaterar våra guider för att ständigt möta dina behov.

Alternativt kan du ställa en fråga, lämna en kommentar eller ge feedback med formuläret Lämna ett svar som finns i slutet av denna sida.

Slutligen, för fler PowerShell tech S Zones, besök vår Windows PowerShell How-To guide-sida. Du kan också hitta vår Work from Home-sida till stor hjälp.