Batch om bestanden te verwijderen

Status
Niet open voor verdere reacties.

heula

Gebruiker
Lid geworden
7 nov 2000
Berichten
225
Ik heb wat hulp nodig bij mijn wens om bestanden met een bepaalde extensie te verwijderen afhankelijk van of een bestand met een andere extensie en dezelfde naam zich in de map bevind.

Voorbeeld:

Wanneer deze 2 bestanden bestaan in een map dan moet er niets gebeuren.

Revenge - s02e17 - Victory.mkv
Revenge - s02e17 - Victory.srt

Maar op het moment dat het mkv bestand niet meer in de map staat dan wil ik dat het srt bestand ook wordt verwijderd.

Met de mediaplayer die ik gebruik om te kijken kan ik wel het videobestand verwijderen maar laat het srt dus ongemoeid.

Is het mogelijk een batch bestand te maken die er voor zorgt dat alle srt bestanden worden verwijderd wanneer er geen mkv bestand bestaat met dezelfde naam?

Alvast bedankt voor de hulp.
 
ja dat moet je denk ik in visual basic doen, dan alle bestanden indexeren. en de namen van de bestanden in een listview zetten (voor de overzitelijkheid) en dan vergelijken en verwijderen.
 
Code:
@echo off 
setlocal enableDelayedExpansion
REM vervang C:\ergens door de juiste mapnaam
set x=
set i=
set MYDIR=C:\ergens
CD /D %MYDIR%
IF "%ERRORLEVEL%"=="1" GOTO ERROR
for /F "delims=" %%x in ('dir /B /D *.srt') do (
  for %%i in (%%x) do if not exist %%~nx.mkv DEL "%%x"
)
GOTO END

:ERROR
ECHO Mapnaam niet correct
PAUSE
:END

Tijs.
 
Laatst bewerkt:
Ik heb het geprobeerd maar er gebeurd niet veel.

Het zou gaan om alle mappen en submappen te controleren in de map G:\

Ik heb je batch zo aangepast maar ik zal vast iets niet goed hebben gedaan?

@echo off
setlocal enableDelayedExpansion
REM vervang G:\
set x=
set i=
set MYDIR=G:\
CD /D %G:\%
IF "%ERRORLEVEL%"=="1" GOTO ERROR
for /F "delims=" %%x in ('dir /B /D *.srt') do (
for %%i in (%%x) do if not exist %%~nx.mkv DEL "%%x"
)
GOTO END

:ERROR
ECHO Mapnaam niet correct
PAUSE
:END
 
De batch-file gaat van 1 map uit, niet meerdere, want dat stond niet in je startposting... :rolleyes: Ik zal kijken of ik daar nog wat voor kan maken, maar dat zal niet vandaag meer zijn.
En je aanpassing is onjuist: Je had alleen
set MYDIR=G:\
moeten aanpassen, maar de regel er onder moeten laten zoals ik het gepost had.

Tijs.
 
Klopt, was ik inderdaad vergeten er bij te vermelden dat het om meerdere mappen en submappen gaat.
Bedankt voor je moeite en het heeft zeker geen haast. Thanks.
 
Laatst bewerkt:
De batch-file gaat van 1 map uit, niet meerdere, want dat stond niet in je startposting... :rolleyes: Ik zal kijken of ik daar nog wat voor kan maken, maar dat zal niet vandaag meer zijn.
En je aanpassing is onjuist: Je had alleen
set MYDIR=G:\
moeten aanpassen, maar de regel er onder moeten laten zoals ik het gepost had.

Tijs.

Hey Tijs, kun je me nog verder helpen om dit voor meerdere mappen en submappen voor elkaar te krijgen?

Thanks
 
Code:
@echo off
setlocal enableDelayedExpansion
REM vervang G:\
set x=
set i=
set MYDIR=G:\
CD /D %MYDIR%
IF "%ERRORLEVEL%"=="1" GOTO ERROR
for /F "delims=" %%x in ('dir /B /D /S *.srt') do (
for %%i in (%%x) do if not exist %%~nx.mkv DEL "%%x"
)
GOTO END

:ERROR
ECHO Mapnaam niet correct
PAUSE
:END

Test het zelf even uit.

Tijs.
 
Laatst bewerkt:
Code:
@echo off
setlocal enableDelayedExpansion
REM vervang G:\
set x=
set i=
set MYDIR=G:\
CD /D %G:\%
IF "%ERRORLEVEL%"=="1" GOTO ERROR
for /F "delims=" %%x in ('dir /B /D /S *.srt') do (
for %%i in (%%x) do if not exist %%~nx.mkv DEL "%%x"
)
GOTO END

:ERROR
ECHO Mapnaam niet correct
PAUSE
:END

Test het zelf even uit.

Tijs.

Het bestand verwijdert nu alles uit de submappen maar ook als er wel een mkv bestand met dezelfde naam bestaat. Het verwijdert nu echt alle srt bestanden.
 
Ok, dat geeft het idee dat de regel
for %%i in (%%x) do if not exist %%~nx.mkv DEL "%%x"
niet geschikt is voor submap-gebruik. Ik zal kijken of ik daar een variant op kan bedenken die werkt.

Dat zal niet vandaag zijn.

Tijs.
 
Ok, dat geeft het idee dat de regel
for %%i in (%%x) do if not exist %%~nx.mkv DEL "%%x"
niet geschikt is voor submap-gebruik. Ik zal kijken of ik daar een variant op kan bedenken die werkt.

Dat zal niet vandaag zijn.

Tijs.
Oké prima, heb ook gezien dat alleen de srt bestanden met dezelfde naam als het mkv bestand verwijderd worden maar srt bestanden met afwijkende naam blijft staan. Dus eigenlijk als de mkv niet bestaat blijft de srt staan. Het omgekeerde van wat ik eigenlijk wil gebeurt nu.
 
Zou je nog een keer kunnen kijken naar de batch voor me?
Bedankt.
 
Ik heb iets, maar het werkt niet goed (weet niet waarom, helaas). De volgende code dus NIET gebruiken, want het werkt niet goed:
Code:
REM @echo off
setlocal enabledelayedexpansion
REM vervang C:\test\
set x=
set i=
set MYDIR=C:\test\
CD /D %MYDIR%
IF "%ERRORLEVEL%"=="1" GOTO ERROR
for /F "delims=" %%x in ('dir /B /D /S *.srt') do (
ECHO %%x
SET FILENAME=
SET FILENAME=%%x
ECHO %FILENAME%
ECHO %FILENAME:~0,-3%
ECHO %FILENAME:~0,-4%
REM if not exist "%FILENAME:~0,-4%.mkv" DEL "%%x"
)
GOTO :END

:ERROR
ECHO Mapnaam niet correct
PAUSE
:END

Ik heb in de map C:\test de volgende bestanden staan:
hul hup2.srt
hul hup.srt
hul hup.mk4

Het werkt goed voor hul hup2.XXX maar (vreemd genoeg) maakt bij het testen op hul hup.mkv komt voor de variabele FILENAME er (toch) hul hup2 te staan om op te testen. Waarom die 2 er verschijnt is mij een raadsel, want ik meen dat ik FILENAME reset naar een lege waarde via SET FILENAME=

Ik hoop dus dat iemand zou kunnen verklaren waarom het niet goed werkt.

Zie de trace hieronder:
Code:
C:\test>REM vervang C:\test\

C:\test>set x=

C:\test>set i=

C:\test>set MYDIR=C:\test\

C:\test>CD /D C:\test\

C:\test>IF "0" == "1" GOTO ERROR

C:\test>for /F "delims=" %x in ('dir /B /D /S *.srt') do (
ECHO %x
 SET FILENAME=
 SET FILENAME=%x
 ECHO C:\test\hul hup2.srt
 ECHO C:\test\hul hup2.
 ECHO C:\test\hul hup2
 REM if not exist "C:\test\hul hup2.mkv" DEL "%x"
)

C:\test>(
ECHO C:\test\hul hup.srt
 SET FILENAME=
 SET FILENAME=C:\test\hul hup.srt
 ECHO C:\test\hul hup2.srt
 ECHO C:\test\hul hup2.
 ECHO C:\test\hul hup2
 REM if not exist "C:\test\hul hup2.mkv" DEL "C:\test\hul hup.srt"
)
C:\test\hul hup.srt
C:\test\hul hup2.srt
C:\test\hul hup2.
C:\test\hul hup2

C:\test>(
ECHO C:\test\hul hup2.srt
 SET FILENAME=
 SET FILENAME=C:\test\hul hup2.srt
 ECHO C:\test\hul hup2.srt
 ECHO C:\test\hul hup2.
 ECHO C:\test\hul hup2
 REM if not exist "C:\test\hul hup2.mkv" DEL "C:\test\hul hup2.srt"
)
C:\test\hul hup2.srt
C:\test\hul hup2.srt
C:\test\hul hup2.
C:\test\hul hup2

C:\test>GOTO :END

C:\test>

Tijs.
 
Laatst bewerkt:
Ik hoop dat iemand uitkomst kan bieden inderdaad.
In ieder geval bedankt voor al je moeite.
 
Laatst bewerkt:
Dit script doet wat ik wil. Hulp gekregen van wat mensen op het mediabrowser forum.

Code:
for /f "tokens=* delims= " %%a in ('dir /s/b/ad-h') do (
set srt=
set srtn=
set mkv=
set mkvn=
pushd "%%~a"
call :into
popd
)
del /s /q "*.srt"
for /f "tokens=* delims= " %%a in ('dir /s/b/a-d "*.tmp"') do rename "%%~a" "%%~na.srt"
exit /b
:into
for /f "tokens=* delims= " %%a in ('dir /b/a-d "*.srt"') do (
set mkv= 
set mkvn= 
set srt=%%~nxa
set srtn=%%~na
call :ifnone
call :delnone
)
exit /b
:ifnone
for /f "tokens=* delims= " %%a in ('dir /b/a-d "%srtn%*.mkv"') do (
set mkv=%%~a
set mkvn=%%~na
)
exit /b
:delnone
if "%mkvn%" neq " " for /f "tokens=* delims= " %%a in ('dir /b/a-d "%mkv%"') do rename "%%~na.srt" "%%~na.tmp"
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan