Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление одинаковых файлов по размеру

Ответить
Настройки темы
CMD/BAT - [решено] Удаление одинаковых файлов по размеру

Пользователь


Сообщения: 64
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: Arsenik77
Дата: 16-07-2011
Добрый день, нужен батник который сравнивал и удалял одинаковые по размеру файлы в одной папке (и оставлял только один).
Сторонние программы не хочу использовать, нужно именно bat.

Отправлено: 10:41, 16-07-2011

 

Аватара для root221

Старожил


Сообщения: 168
Благодарности: 13

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo off
set Size=66
set Files=C:\help\*.*
rem Если размер должен быть равным или меньшим Size, то EQU заменить на LEQ
for %%L in (%Files%) do if /i %%~zL EQU %Size% del /f "%%L"

Отправлено: 11:49, 16-07-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 24033
Благодарности: 6979

Профиль | Отправить PM | Цитировать


Цитата Arsenik77:
Сторонние программы не хочу использовать, нужно именно bat. »
Как насчёт скрипта VBScript?
Код: Выделить весь код
Option Explicit

Dim objFSO
Dim strFolder
Dim objFile
Dim objDictionary
Dim elem


If WScript.Arguments.Count = 1 Then
	Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
	
	strFolder = WScript.Arguments.Item(0)
	
	If objFSO.FolderExists(strFolder) Then
		Set objDictionary = WScript.CreateObject("Scripting.Dictionary")
		
		For Each objFile In objFSO.GetFolder(strFolder).Files
			If objDictionary.Exists(objFile.Size) Then
				If objDictionary.Item(objFile.Size) <> "" Then
					objFSO.DeleteFile objDictionary.Item(objFile.Size), True
					objDictionary.Item(objFile.Size) = ""
				End If
				
				objFSO.DeleteFile objFile.Path, True
			Else
				objDictionary.Add objFile.Size, objFile.Path
			End If
		Next
		
		objDictionary.RemoveAll
		
		Set objDictionary = Nothing
	Else
		WScript.Echo "Folder [" & strFolder & "] not found."
	End If
	
	Set objFSO = Nothing
Else
	WScript.Echo "Usage: " & WScript.ScriptName & " <folder>"
End If

WScript.Quit 0
Путь к папке указываем аргументом скрипта.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:41, 16-07-2011 | #3


Ветеран


Contributor


Сообщения: 24033
Благодарности: 6979

Профиль | Отправить PM | Цитировать


PowerShell:
Код: Выделить весь код
param (
    [string]$Folder = "E:\Песочница\0061\*"
)
Get-ChildItem -Path $Folder | `
    Where-Object -FilterScript { -not $_.PSIsContainer } | `
        Group-Object -Property Length | `
            Where-Object -FilterScript { $_.Count -gt 1 } | `
                ForEach-Object -Process {
                    Remove-Item $_.Group
                }
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:01, 16-07-2011 | #4


Пользователь


Сообщения: 64
Благодарности: 1

Профиль | Отправить PM | Цитировать


root221, мне надо чтоб файлы сравнивались между собой (по размеру), а не по конкретному размеру.
Я, в скриптах нуль.
Iska, скрипт полностью удаляет все файлы в папке.

Последний раз редактировалось Arsenik77, 16-07-2011 в 14:58.


Отправлено: 14:51, 16-07-2011 | #5


Ветеран


Contributor


Сообщения: 1518
Благодарности: 849

Профиль | Отправить PM | Цитировать


Arsenik77,
Еще вариант:
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion

pushd "c:\test" || goto:eof

for /f "tokens=*" %%i in ('dir /b /a-d') do call:1 "%%i"
for /f "tokens=2 delims==" %%i in ('set todel_') do echo del %%i %%~zi

popd
goto:eof

:1                                                     
if not defined file_%~z1 (

    set "file_%~z1=%1"

) else (

    echo del !file_%~z1! %~z1
    set "file_%~z1=%1"
    set "todel_%~z1=%1"

)
То что красным удалишь после проверки, зеленым исправишь на своё

Отправлено: 15:07, 16-07-2011 | #6


Пользователь


Сообщения: 64
Благодарности: 1

Профиль | Отправить PM | Цитировать


Foreigner, не работает, написал "Непредвиденное появление: .jpg" (сравниваю jpg)

Отправлено: 16:11, 16-07-2011 | #7


Ветеран


Contributor


Сообщения: 1524
Благодарности: 895

Профиль | Отправить PM | Цитировать


Задача не очень четко поставлена. Вот решение, удаляем все одинаковые по размеру файлы.
Код: Выделить весь код
@Echo Off

Set Otkuda=D:\Delete
Set S1=-1

FOR /F "usebackq delims=" %%f IN (`Dir /B /A:-D /O:SN "%Otkuda%\"`) DO Call :DelSize "%Otkuda%\%%f" 
GoTo :Eof

:DelSize
Set S2=%~z1

If %S1% NEQ %S2% (
   Set S1=%S2%
   Set N1=%1
) Else (
   Del %1
   If Exist %N1% Del %N1%
)
Если надо по одному файлу из тех, у которых размер одинаков, оставить, то строку

If Exist %N1% Del %N1%

следует удалить.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 16:43, 16-07-2011 | #8


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата Arsenik77:
"Непредвиденное появление: .jpg" (сравниваю jpg) »
вы так одинаковые изображения хотите удалить?

Отправлено: 17:02, 16-07-2011 | #9


Ветеран


Contributor


Сообщения: 1518
Благодарности: 849

Профиль | Отправить PM | Цитировать


Arsenik77,

Мой батник удаляет все одинаковые по размеру файлы, независимо от расширения. Если есть например три файла размером 123 и семь файлов размером 321, то он их всех удалит, но оставит файл размером 124, т.к. он один такого размера. В батнике надо указать только папку, в которой сравнивать.

Цитата Arsenik77:
Добрый день, нужен батник который удалял одинаковые по размеру файлы в одной папке. »

Отправлено: 17:13, 16-07-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление одинаковых файлов по размеру

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Удаление одинаковых файлов Tonny_Bennet Программирование в *nix 3 14-12-2010 16:44
CMD/BAT - Удаление старых файлов по имени файлов Bиктор Скриптовые языки администрирования Windows 1 19-04-2010 03:37
CMD/BAT - [решено] Удаление одинаковых подпапок из родительской папки D_Master Скриптовые языки администрирования Windows 2 28-03-2009 15:08
удаление одинаковых папок в под папках clop1000 Хочу все знать 5 17-11-2007 00:51
Поиск одинаковых файлов Geo55 Программное обеспечение Windows 6 23-10-2004 10:01




 
Переход