Jump to content

Leerzeichen in EIngabedatei bei Schleife


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo allerseits,

ich habe mal eine ganz bescheidene Fraen an usere Experten hier. Ich versuche mehere Verzeichnisse in einer Batch regelmäßig zu sichern. Ich woltle es auf die elegante Weise machen, nach dem mir ezählt wurde nimm einfach eine Eingabe TXT-Datei für die Ordnernamen. Auszugsweise sieht das bei mir so aus:

 

@Echo Off


  FOR /D %%i IN (local.txt) DO ROBOCOPY "%USERPROFILE%\Appdata\Local\%%i" "%~dp0\set\profile\%USERNAME%\Appdata\Local\%%i" /PURGE /B /E /R:0 /ZB>nul 2>&1
  FOR /D %%j IN (roaming.txt) DO ROBOCOPY "%USERPROFILE%\Appdata\roaming\%%j" "%~dp0\set\profile\%USERNAME%\Appdata\roaming\%%j" /PURGE /B /E /R:0 /ZB>nul 2>&1
  FOR /D %%t IN (profil.txt) DO ROBOCOPY "%USERPROFILE%\%%t" "%~dp0\set\profile\%USERNAME%\%%t" /PURGE /B /E /R:0 /ZB>nul 2>&1

Als Eingabe datei steht in der roaming.txt zB:

GOOGLE
Network ADB
High Resolution Enteprise

Dies funktioniert auch wunderbar, nur dort wo Leerzeichen sind geht es nicht, wenn ich die Namen in "" schreibe geht es auch nicht. Wie muss es denn heissen?


Danke i.V.


Gruss

chris

Link zu diesem Kommentar

Moin,

 

FOR-Schleifen sind immer eine Sache für sich. Da muss man enorm viel rumprobieren, bis man mal die richtige Variante hat. Um hier nicht gleich mit der Lern-mal-PowerShell-Keule zu arbeiten, werfe ich folgendes Verfahren in den Ring, das ich bei "statischen Schleifen" gern einsetze:

 

[Excel: Admins unbekannter Liebling | faq-o-matic.net]
https://www.faq-o-matic.net/2008/01/19/excel-admins-unbekannter-liebling/

 

Ansonsten haben die Kollegen schon recht - gerade für sowas ist PowerShell nach etwas Einarbeitung viel einfacher und flexibler.

 

Gruß, Nils

Link zu diesem Kommentar

Hmmm  ... ich weiß ja nicht, warum Du Dich so gegen die deutlich modernere Technologie sträubst, aber ich fürchte, Du hast den eigentlichen Vorteil von Powershell noch nicht erkannt.

 

Der wirklich nutzbringende Mehrwert von Powershell ist eigentlich gar nicht die "Power", die die Shell gegenüber CMD/Batch hat, sondern die sehr sehr viel flachere Lernkurve. Die Powershell ist nicht für Programmierer gemacht, sondern für Administratoren. Gerade für solche - nicht abfällig gemeint - Pille-Palle-Aufgaben wie hier in diesem Thread, brauchst Du keine krude gehirnverrenkende Syntax aus dem letzten Jahrtausend beherrschen. Die Grund-Idee von Powershell hast Du Dir innerhalb einer halben Stunde draufgeschafft und von da an geht es nur noch steil bergauf. ;-)  Jeder, der ansatzweise der englishen Sprache mächtig ist, kann auch ohne langes Studium die Syntax von Powershell sehr einfach verstehen.

 

Und wenn man dann erstmal die Grundlagen drauf hat, dann geht der Spaß erst richtig los, weil man sich jetzt mit der gleichen einfachen Syntax die richtig kniffligen Aufgaben vornehmen kann. Und nicht zuletzt bekommt man bei Problemen mit Powershell-Code schneller und mehr und meistens auch bessere Hilfe, weil sich auch viel mehr Menschen damit beschäftigen und sich mehr damit auskennen.

bearbeitet von BOfH_666
Link zu diesem Kommentar

Um bei Deiner Analogie zu bleiben: Ein geübter Holzfäller schafft es ganz leicht, sich mit seiner frisch geschärften Axt ein Brötchen zu schmieren. Schaffst Du es, mit einem Brotmesser einen Baum zu fällen?  ;-) :D 

foreach ($Element in (Get-Content -Path .\local.txt)){
    robocopy "$ENV:USERPROFILE\AppData\Local\$Element" "$PSScriptRoot\set\profile\$ENV:USERNAME\AppData\Local\$Element" /PURGE /B /E /R:0 /ZB>nul 2>&1
}

Die Powershell ist am Ende des Tages ja trotzdem immernoch eine normale Shell und für einfache Aufgaben sind die Unterschiede zwischen den Shells nicht soo groß. Der Punkt - für mich - ist, dass die CMD/Batch bei komplexeren Aufgaben schnell kryptisch wird und an quasi unüberwindbare Grenzen stößt, wo die Powershell eben weitergeht.

 

Aber so lange Du mit CMD/Batch zufrieden bist und zum Ziel kommst, kannst Du es ja auch weiter nutzen. MS wird Dir vermutlich keine Steine in den Weg legen.

vor 2 Stunden schrieb casi4712:

PS: Mit der halben h bist du Dir sicher?

Ich glaube, dass ICH Dir die Grundlagen in einer halben Stunde vermitteln könnte. ;-)

bearbeitet von BOfH_666
Link zu diesem Kommentar
vor 2 Stunden schrieb casi4712:

ich fänds schade wenn MS die CMD wirklicj aus seinem Betriebssystem rausnehmen sollte,

Ich denke auch, dass das nicht passieren wird und es ist auch nicht angekündigt oder so.

 

Es hat aber niemand behauptet, dass der Code für Powershell kürzer wäre. Es ist sogar meistens eher das Gegenteil. Und das Meiste an diesem Beispiel ist der robocopy-Befehl und der muss ja in beiden Versionen quasi gleich sein. Durch die ausführlicheren Befehle ist der Powershell-Code aber für Menschen auch einfacher zu lesen und zu verstehen. Bei einem Befehl "Get-Content" oder "Get-Process" oder "Get-Service" braucht niemand raten, was die Befehle wohl machen könnten. ;-) Bei  CMD/Batch-Befehlen die nur 2 Buchstaben lang sind, ist das schon ein bissl kniffliger. Und wenn es dann mit Optionen und Schaltern weitergeht, hat man meistens nur noch einen Buchstaben und Sonderzeichen machen es auch nicht besser ...  also z.B. "/D %%t"  ... wenn DU ehrlich bist, musst Du zugeben, dass das alles andere als intuitiv und verständlich ist - wenigstens am Anfang. ;-) 

bearbeitet von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...