Jossy82
Lieutenant
- Registriert
- Aug. 2009
- Beiträge
- 561
Ich will in einem "mobilen" Ordner mit mehreren Unterordnern verschiedene config Dateien mit der Endung *.cfg löschen.
Dabei soll aber der Unterordner specialfolder und alle weiteren dort noch verschachtelten Unterordner ausgenommen werden.
Der Code soll in eine bestehende Batch mit aufgenommen werden um den Funktionsumfang zu erweitern und gleichzeitig übersichtlicher zu machen. (Bisher jeden Unterordner einzeln aufgeführt, zudem müssen neue Ordner manuell nachgetragen werden.)
Ich habe es mit folgenden Codeschnippseln aus dem Netz versucht - wobei mir durchaus hier und da wohl einfach der Durchblick fehlt:
Ich bin gut ins Schwimmen geraten und habe den Überblick verloren, kann mir jemand aushelfen?
Dabei soll aber der Unterordner specialfolder und alle weiteren dort noch verschachtelten Unterordner ausgenommen werden.
Der Code soll in eine bestehende Batch mit aufgenommen werden um den Funktionsumfang zu erweitern und gleichzeitig übersichtlicher zu machen. (Bisher jeden Unterordner einzeln aufgeführt, zudem müssen neue Ordner manuell nachgetragen werden.)
Ich habe es mit folgenden Codeschnippseln aus dem Netz versucht - wobei mir durchaus hier und da wohl einfach der Durchblick fehlt:
/////////////////////////////////////////////////////////////////////////////////////
Bester Ansatz denke ich war, auch wenn es nicht läuft:
@Echo off
set root=d:/document and settings <----- Bei mir: set root=%CD%
for /F "usebackq" %%i in (
REM here you must make a block for every folder you dont want to change
REM START OF EXCLUSION LIST
if /i "%%i"=="Appdata" (set flag=1) <----- Bei mir einmal: if /i "%%i"=="specialfolder" (set flag=1)
if /i "%%i"=="default" (set flag=1)
if /i "%%i"=="public" (set flag=1)
REM END OF EXCLUSION LIST
call :delete %%i )
pause
exit /b 0
:delete
if "%flag%"=="0" ( echo Processing: %1
REM here you can delete whatever you want. <------ Keine Ahnung ob ich hier direkt folgendes setzten kann: del /q /f ".cfg
REM the current folder is: %root%\%1 )
goto :eof
/////////////////////////////////////////////////////////////////////////////////////
Weitere Ansätze, die ich noch nicht probiert habe wären (Muss ich wirklich den root setzen wenn ich doch bereits %CD% oder ./ nutzen kann?):
@Echo off
::type the root folder where the "find and delete folder" will run
SET WhereTolook=C:\Admin\testfolder
::What to exclude?
SET ExcludeWhat=%WhereTolook%\MASTER
::then we will search the folder and all its subfolders and pipe | that output to "FINDSTR" command that find everything except the folder you want to exclude then we RD(remove folders) and sub folders
FOR /F "delims=*" %%G IN ('dir "%WhereTolook%" /B /S /AD ^| findstr /v "%ExcludeWhat%"') DO RD "%%G" /Q /S
::If there are any files in the root directory you want to remove
del %WhereTolook% /q
/////////////////////////////////////////////////////////////////////////////////////
@Echo OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "keepfile=1.bat"
SET "keepdir=keep me"
FOR /d %%a IN ("%sourcedir%\*") DO IF /i NOT "%%~nxa"=="%keepdir%" RD /S /Q "%%a"
FOR %%a IN ("%sourcedir%\*") DO IF /i NOT "%%~nxa"=="%keepfile%" DEL "%%a"
GOTO :EOF
/////////////////////////////////////////////////////////////////////////////////////
Bester Ansatz denke ich war, auch wenn es nicht läuft:
@Echo off
set root=d:/document and settings <----- Bei mir: set root=%CD%
for /F "usebackq" %%i in (
dir /b "%root%"
) do ( set flag=0 REM here you must make a block for every folder you dont want to change
REM START OF EXCLUSION LIST
if /i "%%i"=="Appdata" (set flag=1) <----- Bei mir einmal: if /i "%%i"=="specialfolder" (set flag=1)
if /i "%%i"=="default" (set flag=1)
if /i "%%i"=="public" (set flag=1)
REM END OF EXCLUSION LIST
call :delete %%i )
pause
exit /b 0
:delete
if "%flag%"=="0" ( echo Processing: %1
REM here you can delete whatever you want. <------ Keine Ahnung ob ich hier direkt folgendes setzten kann: del /q /f ".cfg
REM the current folder is: %root%\%1 )
goto :eof
/////////////////////////////////////////////////////////////////////////////////////
Weitere Ansätze, die ich noch nicht probiert habe wären (Muss ich wirklich den root setzen wenn ich doch bereits %CD% oder ./ nutzen kann?):
@Echo off
::type the root folder where the "find and delete folder" will run
SET WhereTolook=C:\Admin\testfolder
::What to exclude?
SET ExcludeWhat=%WhereTolook%\MASTER
::then we will search the folder and all its subfolders and pipe | that output to "FINDSTR" command that find everything except the folder you want to exclude then we RD(remove folders) and sub folders
FOR /F "delims=*" %%G IN ('dir "%WhereTolook%" /B /S /AD ^| findstr /v "%ExcludeWhat%"') DO RD "%%G" /Q /S
::If there are any files in the root directory you want to remove
del %WhereTolook% /q
/////////////////////////////////////////////////////////////////////////////////////
@Echo OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "keepfile=1.bat"
SET "keepdir=keep me"
FOR /d %%a IN ("%sourcedir%\*") DO IF /i NOT "%%~nxa"=="%keepdir%" RD /S /Q "%%a"
FOR %%a IN ("%sourcedir%\*") DO IF /i NOT "%%~nxa"=="%keepfile%" DEL "%%a"
GOTO :EOF
/////////////////////////////////////////////////////////////////////////////////////
Ich bin gut ins Schwimmen geraten und habe den Überblick verloren, kann mir jemand aushelfen?