2014-09-22 2 views
1

У меня есть код, который очень близок к тому, что мне нужно, но я не могу понять, как удалить часть. Это нужно создать как код для .bat-файла.Пакетный файл, чтобы найти дубликаты файлов и удалить обманы

Я хочу сделать следующее:

  1. Проверьте папку для своих файлов.
  2. Проверьте вторую папку, и если вторая папка имеет файлы с тем же файломNAME, что и исходная папка, удалите ее из второй папки (только).
  3. Проверьте третью папку, и если третья папка имеет тот же файл, что и исходная папка, удалите ее из третьей папки (только).

Это отлично работает, чтобы скопировать все дубликаты файлов в новый каталог:

for %%F in ("E:\Temp only\dupe test\Holding Area\**") do (
    if exist "E:\Temp only\dupe test\Stock Folder\%%~nxF" copy "%%~fF" "E:\Temp only\dupe test\Destination\%%~nxF" 
    if exist "E:\Temp only\dupe test\Special\%%~nxF" copy "%%~fF" "E:\Temp only\dupe test\Destination\%%~nxF" 
) 

Так вместо того, чтобы «копировать» в новую папку, мне нужно удалить дубликаты файлов из папки, что дубликатов существует. Первая папка - это «Оригинал» для проверки, и файлы никогда не должны удаляться оттуда.

Пожалуйста, помогите, если сможете. И огромное спасибо!

+0

и вы просто не изменяете 'COPY' с' DEL'? – npocmaka

+0

Нет, он удаляется из исходной папки. –

+0

'copy '%% ~ fF" "E: \ Temp only \ dupe test \ Destination \ %% ~ nxF" 'to' del "E: \ Temp only \ dupe test \ Destination \ %% ~ nxF" ' – npocmaka

ответ

0
@echo off 

setlocal 

set "source_folder=E:\Temp only\dupe test\Holding Area" 
set "folder2=E:\Temp only\dupe test\Stock Folder" 
set "folder1=E:\Temp only\dupe test\Special" 

set "log_file=.\log.txt" 

setlocal enableDelayedExpansion 
for %%F in ("%source_folder%\*") do ( 

    if exist "%folder2%\%%~nxF" ( 
     echo deleting "%folder2%\%%~nxF" at !date! !time! 
     del /q /f "%folder2%\%%~nxF" 
     if exist "%folder2%\%%~nxF" echo deleting failed 

    )>> "%log_file%" 

    if exist "%folder1%\%%~nxF" ( 
     echo deleting "%folder1%\%%~nxF" at !date! !time! 
     del /q /f "%folder1%\%%~nxF" 
     if exist "%folder1%\%%~nxF" echo deleting failed 
    )>> "%log_file%" 
) 
endlocal 
endlocal 
0

Я думаю, что я понял это. Кажется, это работает. Дайте мне знать, если вы видите какие-либо проблемы с этим, что я, возможно, не замечаю.

for %%F in ("E:\Temp only\dupe test\Holding Area\**") do (
if exist "E:\Temp only\dupe test\Stock Folder\%%~nxF" del "E:\Temp only\dupe test\Stock Folder\%%~nxF" 
if exist "E:\Temp only\dupe test\Special\%%~nxF" del "E:\Temp only\dupe test\Special\%%~nxF" 
) 
+0

вы можете используйте файл 'DEL/Q/F '' ', чтобы сделать команду delete более ... хмм ... мощной. – npocmaka

+0

Нужно ли вообще регистрировать то, что было сделано в файле журнала? –

+0

спасибо! что делают эти вещи? и что вы имеете в виду более «мощный»? –

0

У меня была похожая ситуация, когда мне нужно удалить файл TIF, когда PDF с тем же именем доступно. вот 5 строк командного файла.

rem A simpler solution to traverse sub-folders with a root folder provided and remove files with the same name but different extension. 

@echo on 
for /R %%I in (*.tif) do ( 
@echo checking 
if exist %%~dI%%~pI%%~nI.PDF del %%I) 
pause 

Поместите этот код в пакетный файл и укажите корневую папку. Пакетный процесс будет смотреть на все файлы и подпапки и удалять все файлы tif.

Смежные вопросы