Do-While Schleife mit test-path
windelterrorist (Level 1) - Jetzt verbinden
21.12.2015, aktualisiert 22.12.2015, 2579 Aufrufe, 12 Kommentare
Sry, dass ich euch nochmals stören muss...
Brauche Hilfe bei einer Do-While Schleife... Es soll erst nach $destination abgefragt werden, wenn der Quellpfad genau definiert wurde
(mit überprüfung, dass der Sourcepfad auch wirklich existiert, falls dieser nicht existiert, erneut abfragen... wenn der Sourcepfad auch wirklich exisitiert soll der Loop verlassen werden)
Mein Code:
...
$source = read-host "Bitte geben sie den Sourcepfad ein"
Do {
If (Test-path $source) {
$destination = read-host "Bitte geben sie den Zielpfad ein (Am Ende des Pfades keinen \ )"
}
else {
echo "Dieser Pfad existiert nicht, bitte prüfen Sie ihre Eingabe!"
}
}
While (bedingung)
...
Nun fehlt eigentlich nur noch die While (bedingung)...
Danke schonmal im Voraus.
Gruss
windelterrorist
Brauche Hilfe bei einer Do-While Schleife... Es soll erst nach $destination abgefragt werden, wenn der Quellpfad genau definiert wurde
(mit überprüfung, dass der Sourcepfad auch wirklich existiert, falls dieser nicht existiert, erneut abfragen... wenn der Sourcepfad auch wirklich exisitiert soll der Loop verlassen werden)
Mein Code:
...
$source = read-host "Bitte geben sie den Sourcepfad ein"
Do {
If (Test-path $source) {
$destination = read-host "Bitte geben sie den Zielpfad ein (Am Ende des Pfades keinen \ )"
}
else {
echo "Dieser Pfad existiert nicht, bitte prüfen Sie ihre Eingabe!"
}
}
While (bedingung)
...
Nun fehlt eigentlich nur noch die While (bedingung)...
Danke schonmal im Voraus.
Gruss
windelterrorist
12 Antworten
- LÖSUNG 114757 schreibt am 21.12.2015 um 17:45:21 Uhr
- LÖSUNG windelterrorist schreibt am 21.12.2015 um 19:00:27 Uhr
- LÖSUNG 114757 schreibt am 21.12.2015 um 19:04:09 Uhr
- LÖSUNG windelterrorist schreibt am 22.12.2015 um 10:29:22 Uhr
- LÖSUNG windelterrorist schreibt am 22.12.2015 um 15:49:25 Uhr
- LÖSUNG 114757 schreibt am 22.12.2015 um 23:15:52 Uhr
- LÖSUNG windelterrorist schreibt am 05.01.2016 um 09:20:35 Uhr
- LÖSUNG 114757 schreibt am 05.01.2016 um 09:59:53 Uhr
- LÖSUNG windelterrorist schreibt am 06.01.2016 um 10:57:17 Uhr
- LÖSUNG 114757 schreibt am 06.01.2016 um 11:33:26 Uhr
- LÖSUNG windelterrorist schreibt am 06.01.2016 um 13:46:13 Uhr
- LÖSUNG windelterrorist schreibt am 12.01.2016 um 08:49:13 Uhr
- LÖSUNG 114757 schreibt am 06.01.2016 um 11:33:26 Uhr
- LÖSUNG windelterrorist schreibt am 06.01.2016 um 10:57:17 Uhr
- LÖSUNG 114757 schreibt am 05.01.2016 um 09:59:53 Uhr
- LÖSUNG windelterrorist schreibt am 05.01.2016 um 09:20:35 Uhr
- LÖSUNG 114757 schreibt am 22.12.2015 um 23:15:52 Uhr
- LÖSUNG windelterrorist schreibt am 22.12.2015 um 15:49:25 Uhr
- LÖSUNG windelterrorist schreibt am 22.12.2015 um 10:29:22 Uhr
- LÖSUNG 114757 schreibt am 21.12.2015 um 19:04:09 Uhr
- LÖSUNG windelterrorist schreibt am 21.12.2015 um 19:00:27 Uhr
LÖSUNG 21.12.2015, aktualisiert 22.12.2015
Do {
$source = Read-Host "Quellpfad angeben"
if (!(Test-Path $source)){write-host "Pfad existiert nicht" -ForegroundColor Yellow}
}until(Test-Path $source)
Do {
$destination= Read-Host "Zielpfad angeben"
if (!(Test-Path $destination)){write-host "Pfad existiert nicht" -ForegroundColor Yellow}
}until(Test-Path $destination)
LÖSUNG 21.12.2015, aktualisiert um 19:11 Uhr
Hi jodel32
Habs mir fast noch gedacht man muss das ganze mit 2 Schleifen machen... kann es erst Morgen testen, aber sollte ja eigentlich prima funktionieren...
Danke dir!
Grüsse
Habs mir fast noch gedacht man muss das ganze mit 2 Schleifen machen... kann es erst Morgen testen, aber sollte ja eigentlich prima funktionieren...
Danke dir!
Grüsse
LÖSUNG 21.12.2015, aktualisiert um 19:04 Uhr
Müssen tut man das nicht, kann man auch kombinieren macht das ganze aber etwas unübersichtllicher
LÖSUNG 22.12.2015 um 10:29 Uhr
Hat funktioniert, genau so, wie ich mir das vorstellte... bin gerade dabei das ganze zu versuchen in eine Schlaufe zu packen.... einfach aus Eigeninteresse 
Vielen Dank jodel32 !
Vielen Dank jodel32 !
LÖSUNG 22.12.2015 um 15:49 Uhr
@114757
Als ich nun weitere Parte meines Skriptes testete, ist mir aufgefallen, dass es noch einen kleinen Makel gibt bei der einen Schlaufe hat...
Und zwar bei der Do-While Schleife mit dem $destination... wenn man zum Beispiel als Zielpfad "E:\test\kopieren" angibt, dann wäre es doch toll wenn er diesen auch erstellen würde (wenns z.B. erst E:\test gibt), anstatt die Meldung "Pfad existiert nicht" auszugeben...
Beim Sourcepfad muss dieser natürlich existieren, da stimmts parfait, aber der Zielfpfad könnte ja erstellt werden, wenn dieser noch nicht vorhanden ist... Trotzdem sollten aber Eingaben wie "E\:" (fehlerhaft) oder wie "D:\" (wenns das Laufwerk D: nicht gibt), verhindert werden...
Gruss
windelterrorist
Als ich nun weitere Parte meines Skriptes testete, ist mir aufgefallen, dass es noch einen kleinen Makel gibt bei der einen Schlaufe hat...
Und zwar bei der Do-While Schleife mit dem $destination... wenn man zum Beispiel als Zielpfad "E:\test\kopieren" angibt, dann wäre es doch toll wenn er diesen auch erstellen würde (wenns z.B. erst E:\test gibt), anstatt die Meldung "Pfad existiert nicht" auszugeben...
Beim Sourcepfad muss dieser natürlich existieren, da stimmts parfait, aber der Zielfpfad könnte ja erstellt werden, wenn dieser noch nicht vorhanden ist... Trotzdem sollten aber Eingaben wie "E\:" (fehlerhaft) oder wie "D:\" (wenns das Laufwerk D: nicht gibt), verhindert werden...
Gruss
windelterrorist
LÖSUNG 22.12.2015, aktualisiert 06.01.2016
Zitat von @windelterrorist:
Und zwar bei der Do-While Schleife mit dem $destination... wenn man zum Beispiel als Zielpfad "E:\test\kopieren" angibt, dann wäre es doch toll wenn er diesen auch erstellen würde (
Wo ist das Problem ????Und zwar bei der Do-While Schleife mit dem $destination... wenn man zum Beispiel als Zielpfad "E:\test\kopieren" angibt, dann wäre es doch toll wenn er diesen auch erstellen würde (
md 'e:\test\kopieren'
try{
md 'e:\test\kopieren'
}catch{
write-host $_.Exception.Message -F Red
}
http://blogs.msdn.com/b/kebab/archive/2013/06/09/an-introduction-to-err ...
dann sollte es auch bei dir Klick machen.
LÖSUNG 05.01.2016, aktualisiert um 09:21 Uhr
Hi jodel32
Also... tut mir leid, dass ich dir erst jetzt antworten konnte...
Vielen Dank für deine Bemühung!
Die try, catch Methode hat grundsätzlich mein Problem gelöst... aber in beiden Abfragen (Source- und Destinationpfad) tritt bei einer leeren Eingabe ("") folgendes auf:
Test-Path : Cannot bind argument to parameter 'Path' because it is an empty string.
[Test-Path], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.TestPathCommand
Ich versuchte es so zu lösen, jedoch erfolglos:
Do {
$source = Read-Host "Bitte geben Sie den Quellpfad an"
if (($source = "") -or !(Test-Path $source)){
write-host "Pfad existiert nicht" -ForegroundColor Yellow
}
}until(Test-Path $source)
Frohes Neus!
Also... tut mir leid, dass ich dir erst jetzt antworten konnte...
Vielen Dank für deine Bemühung!
Die try, catch Methode hat grundsätzlich mein Problem gelöst... aber in beiden Abfragen (Source- und Destinationpfad) tritt bei einer leeren Eingabe ("") folgendes auf:
Test-Path : Cannot bind argument to parameter 'Path' because it is an empty string.
if (!(Test-Path $source)){
~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.TestPathCommand
Ich versuchte es so zu lösen, jedoch erfolglos:
Do {
$source = Read-Host "Bitte geben Sie den Quellpfad an"
if (($source = "") -or !(Test-Path $source)){
write-host "Pfad existiert nicht" -ForegroundColor Yellow
}
}until(Test-Path $source)
Frohes Neus!
LÖSUNG 05.01.2016, aktualisiert 06.01.2016
einfach vorher mit einer if auf einen leeren String prüfen, oder das ganze mit regex abfackeln, bleibt dir überlassen ...
LÖSUNG 06.01.2016, aktualisiert um 10:58 Uhr
finde es aber komisch, dass es so nicht funktioniert:
Do {
$source = Read-Host "Bitte geben Sie den Quellpfad an"
if (($source -eq $null) -or !(Test-Path $source)){
write-host "Pfad existiert nicht" -ForegroundColor Yellow
}
}until(Test-Path $source)
Was ist denn da falsch? Oder was mache ich falsch? Nach einer leeren Eingabe spuckt er immer den selben Fehler aus...
Test-Path : Das Argument kann nicht an den Parameter "Path" gebunden werden, da es sich um eine leere Zeichenfolge handelt.
Do {
$source = Read-Host "Bitte geben Sie den Quellpfad an"
if (($source -eq $null) -or !(Test-Path $source)){
write-host "Pfad existiert nicht" -ForegroundColor Yellow
}
}until(Test-Path $source)
Was ist denn da falsch? Oder was mache ich falsch? Nach einer leeren Eingabe spuckt er immer den selben Fehler aus...
Test-Path : Das Argument kann nicht an den Parameter "Path" gebunden werden, da es sich um eine leere Zeichenfolge handelt.
LÖSUNG 06.01.2016, aktualisiert um 13:46 Uhr
Was ist denn da falsch?
Die Variable ist immer noch ein Object und nicht $null sondern ein leerer String, kannst du dir auch ganz einfach anzeigen lassen mit $source.getType()($source -eq "")
Und außerdem sollte die Prüfung auf leeren String nicht in der gleichen IF-Abfrage stattfinden da immer beide Ausdrücke ausgewertet werden.
Kannst du dir auch als mehrfach verwendbare Funktion kapseln
function Get-ValidPath($query){
While($true){
$input = Read-Host $query
if($input -ne ""){
if (Test-Path $input){
return $input
}else{
write-host "Pfad existiert nicht! Eingabe wiederholen" -ForegroundColor Yellow
}
}else{
write-host "Sie haben keine Eingabe getätigt! Eingabe wiederholen." -ForegroundColor Yellow
}
}
}
cls
$path = Get-ValidPath "Quellpfad eingeben"
$path
LÖSUNG 06.01.2016, aktualisiert um 13:53 Uhr
Nun ist mir schon einiges klarer...
Ich denke nun muss ich dich nicht mehr weiter belästigen... was Pfade überprüfen angeht... ;)
Vielen herzlichen Dank!
Ich denke nun muss ich dich nicht mehr weiter belästigen... was Pfade überprüfen angeht... ;)
Vielen herzlichen Dank!
LÖSUNG 12.01.2016, aktualisiert um 09:15 Uhr
Oder doch nochmals...
Für eine Destinationpath abfrage habe ich so meine Vorstellungen, kann sie aber selbst nicht wirklich umsetzen. Grundsätzlich ist der Aufbau ja ähnlich, wie beim Sourcepfad.
- Leere Eingabe verhindern und erneut abfragen
- Wenn kein "Laufwerksbuchstaben" (z.B. (C:\ oder D:\ ...)) am Anfang der Eingabe steht, oder der Laufwerksbuchstabe nicht existiert (z.B. Y:\ dabei gibt es diesen nicht), dann ebenfalls verhindern und erneut abfragen
- Wenn ein gültger Laufwerksbuchstaben eingegeben wurde, dann soll die folgende Struktur erstellt werden, z.B. :
Eingabe: C:\abcd , so wird der Ordner "abcd" im "C:\" Laufwerk erstellt
Mit @114757 's Hilfe konnte ich diese Grundstruktur erstellen:
function Get-ValidPath($querydest){
While($true){
$input = Read-Host $querydest
if($input -ne ""){
if (Test-Path $input){
return $input
}
else{
try{
md "$input"
}
catch{
#return $input
write-host $_.Exception.Message -F Red}
}
}
else{
write-host "Sie haben keine Eingabe getätigt! Eingabe wiederholen." -ForegroundColor Yellow}
}
}
cls
$destpath = Get-ValidPath "Zielpfad eingeben"
$destpath
Das Problem wäre jetzt einfach noch, dass er die Laufwerksbuchstaben erkennen soll und überprüfen, ob diese existieren.
Für eine Destinationpath abfrage habe ich so meine Vorstellungen, kann sie aber selbst nicht wirklich umsetzen. Grundsätzlich ist der Aufbau ja ähnlich, wie beim Sourcepfad.
- Leere Eingabe verhindern und erneut abfragen
- Wenn kein "Laufwerksbuchstaben" (z.B. (C:\ oder D:\ ...)) am Anfang der Eingabe steht, oder der Laufwerksbuchstabe nicht existiert (z.B. Y:\ dabei gibt es diesen nicht), dann ebenfalls verhindern und erneut abfragen
- Wenn ein gültger Laufwerksbuchstaben eingegeben wurde, dann soll die folgende Struktur erstellt werden, z.B. :
Eingabe: C:\abcd , so wird der Ordner "abcd" im "C:\" Laufwerk erstellt
Mit @114757 's Hilfe konnte ich diese Grundstruktur erstellen:
function Get-ValidPath($querydest){
While($true){
$input = Read-Host $querydest
if($input -ne ""){
if (Test-Path $input){
return $input
}
else{
try{
md "$input"
}
catch{
#return $input
write-host $_.Exception.Message -F Red}
}
}
else{
write-host "Sie haben keine Eingabe getätigt! Eingabe wiederholen." -ForegroundColor Yellow}
}
}
cls
$destpath = Get-ValidPath "Zielpfad eingeben"
$destpath
Das Problem wäre jetzt einfach noch, dass er die Laufwerksbuchstaben erkennen soll und überprüfen, ob diese existieren.