user88
Goto Top

Mehrere if anweisungen in Powershell

Hallo,

ich arbeite schon seit einer Woche an meinem ersten Powershell-Script.

Doch im Moment komm ich leider nicht mehr weiter.

Ich muss irgendwie in dem Script fragen, ob ein Verzeichnis existiert. Und wenn ein Verzeichnis existiert, dann soll überprüft werden, ob eine bestimmte Datei existiert.
Wenn diese bestimmte Datei nicht existiert, dann soll sie angelegt werden.
Sollte das Verzeichnis nicht existieren, dann soll sie angelegt werden.

$Verzeichnis = 'C:\Scripte\Powershell'
$Datei = 'C:\Scripte\Powershell\test.txt'

If (Test-Path $Verzeichnis){
echo "Verzeichnis existiert"

If (Test-Path $Datei){
{echo "Datei existiert"}
else
{echo "Datei existiert nicht"
New-Item 'C:\Scripte\Powershell' -Name test.txt -type "file" -value "testtesttest" -force}


else
{New-Item C:\Scripte\Powershell -type directory
}}}

aber irgendwie funktioniert das ganze nicht.

Woher weiß ich, dass wenn z.B. das Verzeichnis nicht existiert und der Script zu letzten else springt, und nicht zu ersten else?

Hoffe ihr könnt mir helfen.
danke schon mal im Vorraus.

Content-Key: 147886

Url: https://administrator.de/contentid/147886

Printed on: April 25, 2024 at 11:04 o'clock

Member: Korrn
Korrn Jul 29, 2010 at 07:28:14 (UTC)
Goto Top
Hallo.

Warum verschachtelst Du die IF-Anweisungen überhaupt?

IF NOT EXIST %verzeichnis% MKDIR %verzeichnis%
IF NOT EXIST %verzeichnis%\%datei% MK %verzeichnis%\%datei%

Ansonsten müsstest Du Deine aktuelle Logik entweder zwei mal durchlaufen, oder hinter "{New-Item C:\Scripte\Powershell -type directory" im else-Zweig der äußeren Verzweigung nach dem Verzeichnis auch noch die Datei anlegen.
Member: 5t8d1e
5t8d1e Jul 29, 2010 at 07:31:31 (UTC)
Goto Top
Hallo user88,

hier der Auszug aus der Hilfe von PoSh, das Zauberwort nennt sich elseif face-wink.

Syntax
Im folgenden Beispiel wird die Syntax der If-Anweisung
veranschaulicht:


if (<Test1>)
{<Anweisungsliste 1>}
[elseif (<Test2>)
{<Anweisungsliste 2>}]
[else
{<Anweisungsliste 3>}]


Wenn Sie eine If-Anweisung ausführen, wird von Windows PowerShell
die Bedingungsüberprüfung <Test1> als "True" oder "False"
ausgewertet. Wenn <Test1> "True" ergibt, wird <Anweisungsliste 1>
ausgeführt, und die If-Anweisung wird von Windows PowerShell beendet.
Wenn <Test1> "False" ergibt, wird von Windows PowerShell die
durch die Bedingungsanweisung <Test2 > angegebene Bedingung
ausgewertet.

Grüße Torsten
Member: user88
user88 Jul 29, 2010 at 08:22:38 (UTC)
Goto Top
hey Korrn#,

wenn ich den Teil zwei Mal durchlaufen lasse oder nach {New-Item C:\Scripte\...} was einfüge wird der Code zu lang und unprofessionell.:D

Zitat von @Korrn:

IF NOT EXIST %verzeichnis% MKDIR %verzeichnis%
IF NOT EXIST %verzeichnis%\%datei% MK %verzeichnis%\%datei%


du verwechselst Batch mit Powershell oder umgekehrt. face-smile


Ich hab mir dann den Syntax zu If-Anweisung genauer angeschaut, und diesen kurzen Code geschrieben.

$Verzeichnis = 'C:\temp\sem'
$Datei = 'C:\Scripte\Powershell\test.txt'

if (Test-Path $Datei)
{echo "Datei existiert"}
else {New-Item 'C:\Scripte\Powershell' -Name test.txt -type "file" -value "testtesttest" -force}

Es funktioniert einwandfrei.

Danke euch beiden, zumal ich nicht wusste, dass bei Powershell die if-anweisung True oder False ausgibt.