Mit PowerShell per CSV-File Ordner erstellen
Hallo zusammen
Ich habe ein kleines Skript geschrieben...
Es bleibt aber in der csv Datei mit dem Beispiel-Inhalt:
Testordner
ABCD
...
... bei "Testordner", also beim 1. Eintrag, immer stehen und versucht ständig Testordner zu ersellen... wie kann ich in die nächstfolgende Zeile wechseln?
Danke schonmal und Grüsse
Windelterrorist
Ich habe ein kleines Skript geschrieben...
Es bleibt aber in der csv Datei mit dem Beispiel-Inhalt:
Testordner
ABCD
...
... bei "Testordner", also beim 1. Eintrag, immer stehen und versucht ständig Testordner zu ersellen... wie kann ich in die nächstfolgende Zeile wechseln?
$PathUserList = "C:\Pfad\zur\csv\datei\Ordnerliste.csv"
$path = "C:\pfad\zum\stammordner\Ordner_erstellen\"
$input = New-Object -TypeName System.IO.StreamReader($PathUserList);
$file = $input.ReadLine();
$UserList = Import-Csv -Delimiter ";" -Path $PathUserList
while ($file -ne $null){
$file = $file.Split(";")
$pathtofolder = $path + $file
mkdir $pathtofolder
}
Danke schonmal und Grüsse
Windelterrorist
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 303110
Url: https://administrator.de/contentid/303110
Ausgedruckt am: 22.11.2024 um 11:11 Uhr
19 Kommentare
Neuester Kommentar
Beispiel
CSV--Datei mit den Überschriften in Zeile 1
Code:
Wenn das kein absoluter Pfad ist der in der Spalte der CSV steht gibst du diesen stattdessen einfach mit
Feddich.
Gruß jodel32
CSV--Datei mit den Überschriften in Zeile 1
Ordnername;Spalte2;Spalte3
Ordner1;Test1;Test2
Ordner2;Test3;Test4
Ordner2;Test5;Test6
Ordner3;Test7;Test8
Code:
$csv = Import-CSV 'C:\Ordner\demo.csv -Delimiter ';'
$csv | %{md -Path $_.Ordnername }
$csv | %{md -Path "C:\Ziel\$($_.Ordnername)" }
Gruß jodel32
Wie sieht denn deine CSV überhaupt genau aus ?? Wenn die CSV genau so aufgebaut ist wie ich sie oben gepostet haben funktioniert das einwandfrei, alter Kaffee das ...
Das $_.Ordnername muss natürlich an deine CSV-Überschrift der Spalte angepasst werden.
Bedenke: Import-CSV liefert immer ein Array aus Objekten dessen Eigenschaften (Spalten) du abfragen musst. Wenn dir das irgendwann mal klar ist ist das alles kein Hexenwerk mehr.
Das $_.Ordnername muss natürlich an deine CSV-Überschrift der Spalte angepasst werden.
Bedenke: Import-CSV liefert immer ein Array aus Objekten dessen Eigenschaften (Spalten) du abfragen musst. Wenn dir das irgendwann mal klar ist ist das alles kein Hexenwerk mehr.
Wie gesagt geht so einwandfrei ...ansonsten hat deine CSV ein komisches Encoding oder sonst was unreguläres wie z.B. einen nicht erlaubten Namen oder ungültiges Zeichen für einen Ordner.
Installierte Powershell-Version?
Installierte Powershell-Version?
Naja du kannst statt dem Alias md es auch so schreiben
Kommt auf das selbe drauf raus, oder gib den Parameternamen mal mit an, normalerweise benötigt man den aber nicht da es ein positional parameter ist ...
Wenn das alles bei dir nicht lüppt machst du derb was falsch was wir hier nicht sehen können ...
$csv | %{new-item -itemtype Directory -Path "C:\Ziel\$($_.Ordnername)"}
$csv | %{md -Path "C:\Ziel\$($_.Ordnername)"}
Was für 2 Foreach Schleifen ???? Mein Code besteht aus einer einzigen Foreach-Schleife die über alle Objekte der CSV itteriert, und den Ordner der jeweiligen Zeile erstellt, nicht mehr nicht weniger. Mach ich doch 200 mal am Tag, Veräppel mich doch nicht ...
Zitat von @windelterrorist:
Hey all good, jodel32, dein Code ist doch perfekt, nur funktioniert er bei mir nicht... keine Ahnung warum...
Ansonsten wandel das Ganze einmal in eine txt-Datei um und mach (z.B.)Hey all good, jodel32, dein Code ist doch perfekt, nur funktioniert er bei mir nicht... keine Ahnung warum...
$array = gc deineDatei
$array # oder irgendeine andere Zahl
Da sollte er dir die entsprechende Zeile aus der Datei (0-basiert) ausgeben. Wenn das funktioniert, hast du ein Array mit dem du die FOR-Schleife verwenden kannst.
Dann bitte auch das gelöst nicht vergessen.
Hallo Windelterrorist,
zu deiner Fehlermeldung:
Dieser Fehler tritt immer dann auf wenn man die Codezeilen an der falschen Stelle trennt und z.B. statt den obigen Code von Mitglied: 114757 in eine Zeile zu schreiben so trennt:
--> Funktioniert nicht! (man beachte die Position der geschweiften Klammer)
--> Funktioniert:
--> Funktioniert
Denn wenn du oben mal
1..10 | %
direkt in die Konsole eintippst bekommst du genau die Fehlermeldung die du oben gepostet hast. Typische Anfängerfehler. Auch kann man nicht immer alle Codezeilen wie sie hier gepostet werden direkt in die Konsole posten, häufig ist dazu ein Skript nötig, außer man schreibt es so um das man es als Einzeiler in die Konsole pasten kann.
Grüße Uwe
zu deiner Fehlermeldung:
Folgende Meldung erscheint:
Geben Sie Werte für die folgenden Parameter an:
Process:
kann ich folgendes sagen:Geben Sie Werte für die folgenden Parameter an:
Process:
Dieser Fehler tritt immer dann auf wenn man die Codezeilen an der falschen Stelle trennt und z.B. statt den obigen Code von Mitglied: 114757 in eine Zeile zu schreiben so trennt:
--> Funktioniert nicht! (man beachte die Position der geschweiften Klammer)
$csv | %
{md -Path "C:\Ziel\$($_.Ordnername)"}
--> Funktioniert:
$csv | %{
md -Path "C:\Ziel\$($_.Ordnername)"
}
$csv | %{md -Path "C:\Ziel\$($_.Ordnername)"}
Denn wenn du oben mal
1..10 | %
direkt in die Konsole eintippst bekommst du genau die Fehlermeldung die du oben gepostet hast. Typische Anfängerfehler. Auch kann man nicht immer alle Codezeilen wie sie hier gepostet werden direkt in die Konsole posten, häufig ist dazu ein Skript nötig, außer man schreibt es so um das man es als Einzeiler in die Konsole pasten kann.
Grüße Uwe
Zitat von @windelterrorist:
Hätte noch eine zusätzliche Frage... wo müsste ich den Test-path einbauen, um die Ordner jeweils zu testen und wenn sie vorhanden sind, sollen sie nicht erstellt werden?
Ich müsste wie gesagt mehrere 100 Ordner damit erstellen, wenn es nun in der Struktur C:\Ziel\ bereits einen Ordner gibt, welcher in der CSV steht, dann soll dieser nicht erstellt werden... ansonsten erscheint immer "ist bereits vorhanden"
Entweder du schreibst den Parameter -Force dazu dann ignoriert er es wenn der Ordner schon bestehtHätte noch eine zusätzliche Frage... wo müsste ich den Test-path einbauen, um die Ordner jeweils zu testen und wenn sie vorhanden sind, sollen sie nicht erstellt werden?
Ich müsste wie gesagt mehrere 100 Ordner damit erstellen, wenn es nun in der Struktur C:\Ziel\ bereits einen Ordner gibt, welcher in der CSV steht, dann soll dieser nicht erstellt werden... ansonsten erscheint immer "ist bereits vorhanden"
$csv | %{md -Path "C:\Ziel\$($_.Ordnername)" -Force}
$csv | ?{!(Test-Path "C:\Ziel\$($_.Ordnername)")} | %{md -Path "C:\Ziel\$($_.Ordnername)" -Force}
$csv | %{
$path = "C:\Ziel\$($_.Ordnername)"
if (!(Test-Path $path)){md $path -Force}
}