highend01
Goto Top

Probleme beim Zeichenersetzen innerhalb einer FOR Schleife

Hallo zu dieser späten Stunde,

ich hab hier folgendes (gekürztes script)

@ECHO OFF
SET WorkingDir=D:\Users\Benutzer1\Tools
SET RegPath=Windows_7

PUSHD "%WorkingDir%"  
ECHO @ECHO OFF> "%WorkingDir%\Index.bat"  
FOR /F "Delims=" %%A IN ('Dir /B /S /AD "%RegPath%"') DO (  
IF EXIST "%%~fA" Dir /B /A:-D "%%~fA" >NUL 2>NUL && (  
PUSHD "%%~fA"  
FOR /F "Delims=" %%B IN ('Dir /B /S /A-D "*[Install].bat"') DO (  
COPY /Y "%%~fB" "%%~fA\..\" >NUL  
REM
REM Zeichenersetzung für die Pfadangabe fehlt hier
REM
ECHO CALL "%%~fB">> "%WorkingDir%\Index.bat"  
POPD
)))
POPD

Wenn das script durchgelaufen ist, enthält die Datei Index.bat folgendes:
@ECHO OFF
CALL "D:\Users\Benutzer1\Tools\Firefox\.Settings\Windows_7\.Standard Browser [Install].bat"  
CALL "D:\Users\Benutzer1\Tools\Firefox\.Settings\Windows_7\.Std Icons [Install].bat"  
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
setlocal enabledelayedexpansion
voranstelle und dann versuche, im REM-Block z.B per

REM
REM Zeichenersetzung für die Pfadangabe fehlt hier
ECHO !%%B:%RegPath%=!
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

Content-ID: 120379

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

Ausgedruckt am: 18.12.2024 um 19:12 Uhr

rubberman
rubberman 13.07.2009 um 23:49:53 Uhr
Goto Top
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).
Highend01
Highend01 14.07.2009 um 00:03:29 Uhr
Goto Top
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:

REM
SET Testing="%%~fB"  
SET !Testing:\Windows_7=!
REM
ECHO CALL !Testing!>> "%WorkingDir%\Index.bat"  

Dabei passiert folgendes:

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

D:\Users\Benutzer1\Tools>AutoScan.bat
Die Umgebungsvariable "D:\Users\Benutzer1\Tools\Firefox\.Settings\.Standard Browser [Install].bat" ist nicht definiert.  
Die Umgebungsvariable "D:\Users\Benutzer1\Tools\Firefox\.Settings\.Std Icons [Install].bat" ist nicht definiert.  
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.

CALL "D:\Users\Benutzer1\Tools\Firefox\.Settings\Windows_7\.Standard Browser [Install].bat"  
CALL "D:\Users\Benutzer1\Tools\Firefox\.Settings\Windows_7\.Std Icons [Install].bat"  
CALL "D:\Users\Benutzer1\Tools\SyncBackSE\.Settings\Windows_7\.Extensions [Install].bat"  

Irgendwas stimmt hier also noch nicht so wirklich...

Gruß,
Highend
rubberman
rubberman 14.07.2009 um 00:12:24 Uhr
Goto Top
Deine 3. Zeile!
SET Testing=!Testing:\Windows_7=!
Highend01
Highend01 14.07.2009 um 00:26:35 Uhr
Goto Top
Jupp,

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

SET Testing=!Testing:\Windows_7=!

So funktioniert's dann auch mit dem Nachbarn, äh, script^^

Danke dir, rubberman!

Gruß,
Highend
rubberman
rubberman 14.07.2009 um 00:37:48 Uhr
Goto Top
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 face-wink
Gern geschehen.