2012-12-17 11 views
8

Mam skrypt PowerShell, który robi wiele rzeczy, a jeden z nich jest przenoszenie plików:PowerShell „Move-Item” nie czyni katalogu jeśli nie istnieje

$from = $path + '\' + $_.substring(8) 
$to = $quarantaine + '\' + $_.substring(8) 

Move-Item $from $to 

Ale to się stanie struktura katalogów nie jest już obecna na ścieżce $to. Dlatego chciałbym, aby Powershell tworzył go za pomocą tego komandosa. Próbowałem już Move-Item -Force $from $to, ale to nie pomogło.

Co mogę zrobić, aby upewnić się, że funkcja Powershell tworzy potrzebne katalogi, aby działać prawidłowo?
Mam nadzieję, że wyjaśnię, jeśli nie, proszę zapytać!

+0

Zobacz na to pytanie: http://stackoverflow.com/questions/2695504/powershell-2-copy-item-which-creates-a-folder-if- doesnt-exist – cristobalito

+0

Tak właśnie próbowałem, bez powodzenia. Jak wspomniano w moim pytaniu – Michiel

+0

Mógłbym zrobić kopię i usunąć. – cristobalito

Odpowiedz

7

Można go utworzyć samodzielnie:

$from = Join-Path $path $_.substring(8) 
$to = Join-Path $quarantaine $_.substring(8) 

if(!(Test-Path $to)) 
{ 
    New-Item -Path $to -ItemType Directory -PathType Container -Force | Out-Null 
} 

Move-Item $from $to 
+3

'-PathType Container' nie jest parametrem dla' New-Item'. Usuń to i działa zgodnie z oczekiwaniami. – Laoujin

3

Można użyć system.io.directory klasy .NET do sprawdzenia katalogu docelowego i utworzyć jeśli nie istnieje. Oto przykład przy użyciu zmiennych: -

if (!([system.io.directory]::Exists($quarantine))){ 
    [system.io.directory]::CreateDirectory($quarantine) 
} 
Copy-File $from $to 
+0

Dlaczego używałbyś tego na prostszych i bardziej powszechnych 'Test-Path' /' New-Item'? –

+0

@NelsonRothermel W czasie pisania byłem nowy w powershell, nie wiedziałem o nich, a odpowiedź, którą dałem, brzmiała, jak bym to zrobił w tym czasie - to było 4 lata temu. W dzisiejszych czasach rzeczywiście używałbym ścieżki testowej/nowego przedmiotu. –

+0

@NelsonRothermel to coś, co uważam za całkiem miłe w grze typu powerhell - jeśli wejdziesz w to z tłem .NET, wiele z tego, do czego przywykłeś, jest przenośne i można je z łatwością odtwarzać w PowerShell. A jeśli nie ma polecenia cmdlet, które robi to, czego potrzebujesz, ale istnieje klasa .NET, która rozwiązuje problem! –

Powiązane problemy