Probleme beim Zeichenersetzen innerhalb einer FOR Schleife
Hallo zu dieser späten Stunde,
ich hab hier folgendes (gekürztes script)
Wenn das script durchgelaufen ist, enthält die Datei Index.bat folgendes:
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
voranstelle und dann versuche, im REM-Block z.B per
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
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 120379
Url: https://administrator.de/contentid/120379
Ausgedruckt am: 16.11.2024 um 05:11 Uhr
5 Kommentare
Neuester Kommentar
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).
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).
Zitat von @Highend01:
aufgrund von zu vielen Bäumen und zu wenig Wald hab ich das
schlicht nicht mehr gesehen ;(
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.