Was ist die Syntax mehr Verzeichnisse erstellen mit PowerShells md (oder mkdir, New-Item ...) entspricht den ‚nichts Befehl mkdir ch{1..9}
dh
~/parent_dir/
ch1/
ch2/
ch3/
ch4/
ch5/
ch6/
ch7/
ch8/
ch9/
Ich habe in den Manpages und in der Hilfe nach Beispielen gesucht, aber ich kenne die Syntax für PowerShell nicht, um so eine einfache Sache zu tun. Vielen Dank.
linux
powershell
command-line-arguments
mkdir
Mr. Kennedy
quelle
quelle
1..9 | % $_{ md -name $("ch" + $_) }
?1..9 | % $_{ mv ch$_*.* ch$_ }
git add
und zu sehen, was es zurückgibt. Beachten Sie, dass$_
in einem foreach nur jeder einzelne Array-Eintrag des letzten Pipeline-Elements enthalten ist (was bedeutet, dass dercommit
Schritt in Ihrem Beispiel keine Rohzahlen erhält, sodass dasch
erneute Hinzufügen wahrscheinlich falsch ist ). In Ihrem Beispiel werden die Commits erst (?) Ausgeführt, nachdem alle Adds abgeschlossen sind. Dies bedeutet, dass das erste Commit alles erhält ... Alternativ können Sie mehrere Anweisungen (getrennt durch;
) in einem einzelnen foreach-Schritt verwenden.Sie müssen mkdir nicht mehrmals aufrufen, da
New-Item
es eine Reihe von Pfaden annehmen kann. Beispielsweise:@ DavidPostill hat die meisten Konzepte in seiner Antwort erklärt . Dies nutzt auch die String-Interpolation, anstatt eine explizite Verkettung durchzuführen. Zusätzlich wird die
%
Kurzschrift anstelle von verwendetForEach-Object
, hat aber dieselbe Bedeutung.Leider scheint es keine einfache Möglichkeit zu geben, einen String wie in bash in ein Array von Strings zu interpolieren.
quelle
md(0..9|%{"ch$_"})
md
ist ein Standardalias fürmkdir
eine PowerShell-Funktion.%
ist, wie Bob erwähnte, ein Standard-Alias fürForEach-Object
. Zeichenfolgen in doppelten Anführungszeichen interpolieren Variablen und"ch$_"
entsprechen daher'ch' + $_
. Sie können einen Alias nachschlagen, indem SieGet-Command
(gcm
) darauf ausführen.1..9 | %{"ch$_"} | %{git add "$_"; git commit -m "$_"}
oder1..9 | %{$name = "ch$_"; git add "$name"; git commit -m "$name"}
. Diese Kommentare werden jetzt etwas lang. Wenn Sie also weitere Fragen haben, stellen Sie diese bitte als Fragen oder gehen Sie in den Chat.Ich würde für die Schleifenversion verwenden, da es leicht zu merken ist und auf viele Situationen angewendet werden kann. Sogar es kann für mehrere Befehle verwendet werden.
Für ein Äquivalent dieses Bash-Befehls:
... in PowerShell verwenden:
quelle
Missing opening '(' after keyword 'for'.
Dieser Befehl:foreach ($i in 1..9) {md ch$i}
Ermittelt mir nummerierte "ch" -Apter-Verzeichnisse, aber ich verstehe Ihr "für" nicht. ..; do ... done "Schleife.for($i=1; $i -le 10; $i++){md ch$i}
danke mamun, aber ich bin noch nicht "Bourne again ...";) (noch kenne ich C ++, aber ich glaube ich verstehe irgendwie was "$ i-le" (wenn kleiner oder gleich?) Und "$ i ++" (~ "i + = 1"?) bedeuten und tun im Befehl ...Erstellen Sie mehrere Verzeichnisse unter dem aktuellen Verzeichnis:
Das Obige ist eine Kurzversion des Folgenden. Beachten Sie das at-Zeichen vor dem Array von Zeichenfolgen und die Verwendung benannter Parameter:
Und wenn Sie den ganzen Weg gehen möchten, wäre der vollständige native Befehl:
Bei Verwendung der PowerShell-Befehlszeile verwende ich die Kurzversion.
Wenn ich ein Skript schreibe, insbesondere eines für andere (die möglicherweise neu in PowerShell sind), schreibe ich normalerweise den vollständigen nativen Befehl.
Wählen Sie, was für Sie am besten funktioniert.
quelle