Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWünsch Dir wasWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Anfängerfrage: For Schleife

Mitglied: PeterFuch85

PeterFuch85 (Level 1) - Jetzt verbinden

07.09.2020, aktualisiert 09:25 Uhr, 430 Aufrufe, 6 Kommentare

Hallo Zusammen,

bin absoluter Neuling in Sachen Programmierung, habe mich jetzt aber schon etwas eingelesen. Folgende Aufgabe habe ich mir vorgenommen:

Im folgendem Verzeichnis habe ich mehrere Ordner:

C:\TEST\reliability\first_level\

144_1
144_2
155_1
155_2
188_1

Jetzt möchte ich den Inhalt der Ordner die mit einer 2 Enden in den dazugehörigen Ordner mit einer _1 kopieren (oder verschieben)

Mein Ansatz in cmd lautet:

for /f %i in ('dir /b C:\TEST\reliability\first_level\*_2') do set str=%i str=%str:~0,3% && robocopy C:\TEST\reliability\first_level/%str:~0,3%_2\ C:\TEST\reliability\first_level\%str:~0,3%_1\ /E

Ist sicherlich keine elegante Lösung aber für mich würde es reichen wenn es denn funktionieren würde

Irgendwie bekomme ich nicht hin, dass er innerhalb der for Schleife die Variable für jeden Durchgang speichert. Wenn ich folgendes probiere

for /f %i in ('dir /b C:\TEST\reliability\first_level\*_2') do @echo set str=%i str=%str:~0,3%


bekomme ich immer nur die letzte Variable als str gespeichert:

set str=144_2 str=155 (hier sollte 144 stehen, wo liegt der Fehler???)
set str=155_2 str=155


Hoffe Ihr habt verstanden was mein Problem ist. Habe es etwas umständlich erklärt.

Vielen Dank für Eure Hilfe, bin mittlerweile am verzweifeln.

Viele Grüße
Mitglied: miniversum
07.09.2020 um 10:26 Uhr
Hallo,

das ist eine Spezialität des von Batch.
Die Variabeln werden erst nach der Befehlszeile (nach einem Block) aufgelöst und interpretiert.
D.h. str wird zwar der Wert bei jedem Schleifendurchlauf zugewiesen aber str wird erst am Ende aufgelöst.
Umgehen kannst du das nur mit aktivierung der ENABLEDDELAYEDEXPANSION und der verwendung von ! statt % (bitte schau nach wie ENABLEDDELAYEDEXPANSION genau zu benutzen ist) oder du rufst über ein "call" eine unterprozedur auf der du den jeweiligen ordnernamen übergibst.
In dieser Unterprozedur kannst du dann über mehrere Zeilen verteilt die Variable umbauen und den copy befehl aufrufen.

Gruß
...
Bitte warten ..
Mitglied: Doskias
07.09.2020 um 10:42 Uhr
Hallo PeterFuchs,

gestatte die Frage: Wenn du dich jetzt mit Programmierung beschäftigst, wieso dann nicht mit Powershell? Die Möglichkeiten sind vielfältiger und Batch-Befehle sind verwendbar.

Ich würde an der Stelle einfach den Ordnerinhalt auslesen und dann mit einer For-Each-Schleife jeden Eintrag prüfen und bei einer entsprechenden Übereinstimmung den Kopiervorgang starten.

Zitat von PeterFuch85:
Ist sicherlich keine elegante Lösung aber für mich würde es reichen wenn es denn funktionieren würde

Mein Tipp egal was du machst:
Mach es gleich richtig. Elegante Lösungen sind einfacher zu verstehen, was dir und uns die Fehlersuche erleichtert. Mehrere Zeilen zu nutzen kostet auch nicht mehr als alles in eine Zeile zu quetschen und du lernst mehr und wirst besser.

Gruß
Doskias
Bitte warten ..
Mitglied: PeterFuch85
07.09.2020 um 11:21 Uhr
Vielen Dank für Eure Lösungen. Wie gesagt, ich bin noch recht am Anfang und möchte mich nach und nach mit Programmieren beschäftigen. Ich benötige das batchfile relativ schnell für meine Arbeit und da ich jetzt kurz vor dem Ziel bin, werde ich dieses Skript noch gerne so zu ende schreiben. Danach habe ich dann Zeit und werde mir mittels Tutorials Schritt für Schritt Powershell und co. nahebringen.

Der Tipp mit ENABLEDDELAYEDEXPANSION war genau das was ich gebraucht habe.

Leider hänge ich noch an einem vermutlich trivialem Problem. Ich habe es jetzt einmal so umgeschrieben und Prüfe meine Ergebnisse mittels mkdir Befehl ob er mir das richtige Directory ausgibt. Später werde ich den mkdir befehl in robocopy umschreiben

Folgendes Skript gibt mir zwei Folder nur mit den ersten drei Ziffern, so wie ich es wollte:

@echo off
setlocal EnableDelayedExpansion

for /f %%i in ('dir /b C:\TEST\reliability\first_level\*_2') do set str=%%i & set str=!!str:~0,3!! & mkdir C:\TEST\!str!\


AUSGABE: 2 Folder mit 144 und 166

Mein Problem ist aber sobald ich den Pfad so angebe: mkdir C:\TEST\!str!_2\ (anstatt C:\TEST\!str!\)
funktioniert das leider nicht.

Hoffe Ihr könnt mir da schnell weiterhelfen!!
Bitte warten ..
Mitglied: eaglefinder
07.09.2020, aktualisiert um 12:07 Uhr
Der Tipp mit ENABLEDDELAYEDEXPANSION war genau das was ich gebraucht habe.
DelayedExpansion braucht man hier gar nicht wenn man es direkt so schreibt ...
p.s. mit der Powershell sieht's z.B. so aus

Bitte warten ..
Mitglied: 145920
07.09.2020 um 11:53 Uhr
Zur Powershell kann ich dir persönlich nur einen Tip geben.
Suche dir die Tutorials von Peter Kriegel aus. Die gibts auf Youtube.
Die sind detailliert und nutze was er sagt. Pause drücken, nochmal wiederholen usw.


Viel Spaß damit. Ich nutze sie auch, aber manchmal frage ich lieber hier,
da ich hoffe hier immer angepasste Antworten zu bekommen, was auch meistens
der Fall ist. Nicht fragen ist ein Fehler.


Gruß Apusbernd
Bitte warten ..
Mitglied: eaglefinder
07.09.2020, aktualisiert um 12:14 Uhr
Zitat von 145920:

Zur Powershell kann ich dir persönlich nur einen Tip geben.
Suche dir die Tutorials von Peter Kriegel aus. Die gibts auf Youtube.
Die sind detailliert und nutze was er sagt. Pause drücken, nochmal wiederholen usw.
Oder man ist altmodisch und liest sich das Handbuch durch , dann lernt man auch wichtige Dinge die man in Videos meist vermisst.
Ich habe hier zig Azubis die meinen nur mit Videos lernen zu müssen und die verpassen fast alle wichtige Details wie z.B. das "scoping", die Ihnen hinterher fehlen. In der MS Doku stehen viele wichtige Infos die die Videos zum Großteil verschweigen, aber schon bald, wenn man effektiver und fehlerfrei arbeiten will sehr wichtig werden.
Bitte warten ..
Heiß diskutierte Inhalte
Batch & Shell
Mehrere Server anpingen positive und negative Ergebnis in Datei schreiben
Frage von tommhiiBatch & Shell27 Kommentare

Hallo ich hab eine Frage ich habe in einer Liste mehrere Server eingetragen die ich per batch anpingen will. ...

Schulung & Training
Präsentation mit Gestensteuerung (Schnipsen)
gelöst Frage von battalgaziSchulung & Training18 Kommentare

Hallo, ich habe vor kurzem an einer MLP Paresentation teilgenommen, der Dozent hat mit einem Schnipsen die Folien gesteuert. ...

Microsoft Office
Office 2010 Starter SetupConsumerC2ROLW.exe Datei
gelöst Frage von ITAzubi2Microsoft Office18 Kommentare

Moin moin, ich bin frischer IT Azubi und soll auf ein neues Notebook mit Win 10 Office 2010 Starter ...

Webbrowser
Websites als site.mht abspeichern wie im "guten" alten IE
Frage von DerWoWussteWebbrowser16 Kommentare

Servus. Eine kleine, niedliche Frage für den Freitagnachmittag: Wer wie ich öfter Anleitungen von Websites abspeichern möchte, kennt das ...

JavaScript
Subtraktion in Javascript für ausfüllbares PDF
gelöst Frage von imebroJavaScript15 Kommentare

Hallo liebe User, ich habe ein Adobe PDF-Dokument in ein ausfüllbares PDF-Dokument umgewandelt. Grds. funktioniert alles sehr gut. Auch ...

Switche und Hubs
Aruba VSF-2930F DHCP Problem
Frage von fbe280tSwitche und Hubs15 Kommentare

Hallo Ihr da draußen, wir haben drei Aruba VSF-2930F zu einem virtuellen Switch zusammengefügt und haben dort mehrere V-Lans ...

Administrator Magazin
10 | 2020 Nicht erst durch die Corona-Krise sahen sich viele Firmen damit konfrontiert, dass sich Mitarbeiter von unterschiedlichen Geräten und verschiedensten Lokationen aus anmelden. Daher sind hier neue Konzepte für das Berechtigungs- und Identitätsmanagement gefragt, die einerseits die Sicherheit erhöhen und andererseits Nutzern die nötige Flexibilität ...
Best VPN