Batch: for schleife mit if exist Bedingung
Hallo zusammen,
ich hänge wieder mal fest mit meinen rudimentären cmd Kenntnissen. Folgende Aufgabe habe ich:
Im Verzeichnis: C:\temp\first_level\101_1\
befinden sich mehrere Folder mit folgenden Namen:
1_001_localizer_20201012
1_002_T1_sag_mpr_Pat2_ND_20201012
1_004_STI_gre_FieldMapp_64_3_4x3_4x3_4_20201012
1_005_STI_gre_FieldMapp_64_3_4x3_4x3_4_20201012
006_STI_gre_FieldMapp
Jetzt benötige ich eine batch Datei die mir bei allen Ordnern die 1_ (Am Anfang) sowie das Datum am Ende wegschneidet. Zusätzlich soll es bei allen Foldern die ein "64_3_..." im Namen haben dieses auch noch gelöscht werden. Die Folder sollen dann all so aussen wie der letzte (006_STI_gre_FieldMapp)
Folgenden Ansatz habe ich bereits geschrieben:
@echo off
Setlocal EnableDelayedExpansion
@for /f "delims=" %%i in ('dir /b C:\temp\first_level\101_1\1*') do
(
if exist C:\temp\first_level\101_1\*64*
(set fname=%%~ni
set fname=!fname:~2,-24!
ren "%%i" "!fname!"
)
ELSE
(
set fname=%%~ni
set fname=!fname:~2,-9!
ren "%%i" "!fname!"
))
endlocal
Leider gibt er mir damit garnichts aus.
Ehrlich gesagt weiss ich auch nicht so recht wie ich eine if Bedingung in einer For Schleife einbringen kann.
Hoffe Ihr könnt mit weiterhelfen.
ich hänge wieder mal fest mit meinen rudimentären cmd Kenntnissen. Folgende Aufgabe habe ich:
Im Verzeichnis: C:\temp\first_level\101_1\
befinden sich mehrere Folder mit folgenden Namen:
1_001_localizer_20201012
1_002_T1_sag_mpr_Pat2_ND_20201012
1_004_STI_gre_FieldMapp_64_3_4x3_4x3_4_20201012
1_005_STI_gre_FieldMapp_64_3_4x3_4x3_4_20201012
006_STI_gre_FieldMapp
Jetzt benötige ich eine batch Datei die mir bei allen Ordnern die 1_ (Am Anfang) sowie das Datum am Ende wegschneidet. Zusätzlich soll es bei allen Foldern die ein "64_3_..." im Namen haben dieses auch noch gelöscht werden. Die Folder sollen dann all so aussen wie der letzte (006_STI_gre_FieldMapp)
Folgenden Ansatz habe ich bereits geschrieben:
@echo off
Setlocal EnableDelayedExpansion
@for /f "delims=" %%i in ('dir /b C:\temp\first_level\101_1\1*') do
(
if exist C:\temp\first_level\101_1\*64*
(set fname=%%~ni
set fname=!fname:~2,-24!
ren "%%i" "!fname!"
)
ELSE
(
set fname=%%~ni
set fname=!fname:~2,-9!
ren "%%i" "!fname!"
))
endlocal
Leider gibt er mir damit garnichts aus.
Ehrlich gesagt weiss ich auch nicht so recht wie ich eine if Bedingung in einer For Schleife einbringen kann.
Hoffe Ihr könnt mit weiterhelfen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 625593
Url: https://administrator.de/contentid/625593
Ausgedruckt am: 23.11.2024 um 14:11 Uhr
7 Kommentare
Neuester Kommentar
Nimm besser gleich die Powershell ...
Batch geht natürlich auch wenn's unbedingt sein muss
ls 'C:\temp\first_level\101_1\1*' -Directory | ren -NewName {$_.Name -replace '^(1_)(.*)(_\d+)$','$2'} -Verbose
Batch geht natürlich auch wenn's unbedingt sein muss
@echo off & setlocal ENABLEDELAYEDEXPANSION
for /d %%a in ("C:\temp\first_level\101_1\1_*") do (set "newname=%%~na" & set "newname=!newname:~2,-9!" & ren "%%a" "!newname!")
Auch kein Problem
@echo off & setlocal ENABLEDELAYEDEXPANSION
for /d %%a in ("C:\temp\first_level\101_1\1_*") do (
set "newname=%%~na"
echo %%~na|find "64" >nul 2>&1 && (
set "newname=!newname:~2,-24!"
) || (
set "newname=!newname:~2,-9!"
)
ren "%%a" "!newname!"
)
@echo off & setlocal ENABLEDELAYEDEXPANSION
for /d %%a in ("C:\temp\first_level\1*") do (
for /d %%b in ("%%~a\1*") do (
set "newname=%%~nb"
echo %%~nb|find "64" >nul 2>&1 && (
set "newname=!newname:~2,-24!"
) || (
set "newname=!newname:~2,-9!"
)
ren "%%b" "!newname!"
)
Einfach mal
for /?
in die Konsole eintippen und davon etwas lernen, statt immer nur rum zu probieren und auf die F.... zu fallen.Da das hier jetzt mal wieder anfängt auf Basics-Fragen aus zu ufern, bitte Thread dann als gelöst markieren und für neue Sachen bitte einen neuen Fred aufmachen. Danke!
Gute Lektüre für dunkle Winterabende
Tutorial zur FOR-Schleife