Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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 IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Probleme beim Zeichenersetzen innerhalb einer FOR Schleife

Frage Entwicklung Batch & Shell

Mitglied: Highend01

Highend01 (Level 1) - Jetzt verbinden

13.07.2009, aktualisiert 23:25 Uhr, 3642 Aufrufe, 5 Kommentare

Hallo zu dieser späten Stunde,

ich hab hier folgendes (gekürztes script)

01.
@ECHO OFF 
02.
SET WorkingDir=D:\Users\Benutzer1\Tools 
03.
SET RegPath=Windows_7 
04.
 
05.
PUSHD "%WorkingDir%" 
06.
ECHO @ECHO OFF> "%WorkingDir%\Index.bat" 
07.
FOR /F "Delims=" %%A IN ('Dir /B /S /AD "%RegPath%"') DO ( 
08.
IF EXIST "%%~fA" Dir /B /A:-D "%%~fA" >NUL 2>NUL && ( 
09.
PUSHD "%%~fA" 
10.
FOR /F "Delims=" %%B IN ('Dir /B /S /A-D "*[Install].bat"') DO ( 
11.
COPY /Y "%%~fB" "%%~fA\..\" >NUL 
12.
REM 
13.
REM Zeichenersetzung für die Pfadangabe fehlt hier 
14.
REM 
15.
ECHO CALL "%%~fB">> "%WorkingDir%\Index.bat" 
16.
POPD 
17.
))) 
18.
POPD
Wenn das script durchgelaufen ist, enthält die Datei Index.bat folgendes:
01.
@ECHO OFF 
02.
CALL "D:\Users\Benutzer1\Tools\Firefox\.Settings\Windows_7\.Standard Browser [Install].bat" 
03.
CALL "D:\Users\Benutzer1\Tools\Firefox\.Settings\Windows_7\.Std Icons [Install].bat" 
04.
CALL "D:\Users\Benutzer1\Tools\SyncBackSE\.Settings\Windows_7\.Extensions [Install].bat"
Soweit so gut. Allerdings möchte ich innerhalb der zweiten For-Schleife die Ausgabe (vor dem endgültigen ECHO...)
etwas umformatieren. Der Wert der Variable %RegPath% (in diesem Fall ist er gerade "Windows_7") soll inklusive
dem nachfolgenden Backslash herausgeschnitten werden, bevor die Zeilen per Echo in der Index.bat landen.

Wenn ich dem script ein
01.
setlocal enabledelayedexpansion
voranstelle und dann versuche, im REM-Block z.B per

01.
REM 
02.
REM Zeichenersetzung für die Pfadangabe fehlt hier 
03.
ECHO !%%B:%RegPath%=! 
04.
REM
den %RegPath% gegen nichts zu ersetzen, bekomme ich als Ausgabe immer nur den Pfad PLUS dem
Inhalt von %RegPath% hinten angehängt (aber nicht ersetzt).

Mag mir jemand auf die Sprünge helfen, wie ich das Herausschneiden an dieser Stelle erledige?

Der sonstige Vorgang (1. Suche nach Verzeichnissen, die %RegPath% im Namen enthalten,
2. Überprüfe, ob in dem Verzeichnis auch wirklich Dateien liegen, 3. Wechsle in das Verzeichnis,
suche dort nach Dateien mit "*[Install].bat" im Namen und kopiere sie eine Ebene höher soll
nicht verändert werden.

Danke im voraus,
Highend
Mitglied: rubberman
13.07.2009 um 23:49 Uhr
Das Problem dürfte sein, dass du in der FOR Variablen keine Ersetzungen vornehmen kannst.
Du musst sie also erst einer regulären Variablen zuordnen bei der du die Ersetzung vornimmst und mit der du weiterarbeiten kannst (mit "setlocal enabledelayedexpansion" versteht sich, weil sonst die Variable zur Laufzeit der FOR Schleife nur einmal expandiert wird).
Bitte warten ..
Mitglied: Highend01
14.07.2009 um 00:03 Uhr
Ich seh den Wald vor lauter Bäumen nicht mehr ;)

Danke erstmal für den Hinweis. Allerdings gibt es noch Probleme bei der Umsetzung...

Mittelteil im script sieht nun z.B. so aus:

01.
REM 
02.
SET Testing="%%~fB" 
03.
SET !Testing:\Windows_7=! 
04.
REM 
05.
ECHO CALL !Testing!>> "%WorkingDir%\Index.bat"
Dabei passiert folgendes:

Im DOS-Fenster, in dem ich die .bat Datei aufrufe erhalte ich die Meldungen:

01.
D:\Users\Benutzer1\Tools>AutoScan.bat 
02.
Die Umgebungsvariable "D:\Users\Benutzer1\Tools\Firefox\.Settings\.Standard Browser [Install].bat" ist nicht definiert. 
03.
Die Umgebungsvariable "D:\Users\Benutzer1\Tools\Firefox\.Settings\.Std Icons [Install].bat" ist nicht definiert. 
04.
Die Umgebungsvariable "D:\Users\Benutzer1\Tools\SyncBackSE\.Settings\.Extensions [Install].bat" ist nicht definiert.
Man sieht zumindest in dieser Ausgabe, dass das "\Windows_7" korrekt aus dem Pfad entfernt wurde.

Allerdings sehen die Zeilen in der Index.bat dann wieder völlig normal aus.

01.
CALL "D:\Users\Benutzer1\Tools\Firefox\.Settings\Windows_7\.Standard Browser [Install].bat" 
02.
CALL "D:\Users\Benutzer1\Tools\Firefox\.Settings\Windows_7\.Std Icons [Install].bat" 
03.
CALL "D:\Users\Benutzer1\Tools\SyncBackSE\.Settings\Windows_7\.Extensions [Install].bat"
Irgendwas stimmt hier also noch nicht so wirklich...

Gruß,
Highend
Bitte warten ..
Mitglied: rubberman
14.07.2009 um 00:12 Uhr
Deine 3. Zeile!
01.
SET Testing=!Testing:\Windows_7=!
Bitte warten ..
Mitglied: Highend01
14.07.2009 um 00:26 Uhr
Jupp,

aufgrund von zu vielen Bäumen und zu wenig Wald hab ich das schlicht nicht mehr gesehen ;(

01.
SET Testing=!Testing:\Windows_7=!
So funktioniert's dann auch mit dem Nachbarn, äh, script^^

Danke dir, rubberman!

Gruß,
Highend
Bitte warten ..
Mitglied: rubberman
14.07.2009 um 00:37 Uhr
Zitat von Highend01:
aufgrund von zu vielen Bäumen und zu wenig Wald hab ich das
schlicht nicht mehr gesehen ;(

Geht mir auch regelmäßig so
Gern geschehen.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Verschachtelte FOR-Schleife mit einem Argument (3)

Frage von mp-home zum Thema Batch & Shell ...

Batch & Shell
gelöst Fehler in Schleife (2)

Frage von miczar zum Thema Batch & Shell ...

Batch & Shell
For Schleife in einer .sh Datei (4)

Frage von CrystalFlake zum Thema Batch & Shell ...

Batch & Shell
gelöst While Schleife mit mehreren Arrays (2)

Frage von Markus2016 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Internet
gelöst Jeden morgen Internet-Probleme (56)

Frage von pjrtvly zum Thema Internet ...

Server-Hardware
HP DL380 G7: Booten vom USB via USB 3.1-PCI-e Karte möglich? (24)

Frage von Paderman zum Thema Server-Hardware ...

LAN, WAN, Wireless
gelöst IP Adressen - Modem - Switch - Accesspoint (22)

Frage von teuferl82 zum Thema LAN, WAN, Wireless ...

Windows 7
Bluesreens unternehmensweit (22)

Frage von SYS64738 zum Thema Windows 7 ...