Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Сравнение файлов по части имени (http://forum.oszone.net/showthread.php?t=247022)

sampir 15-11-2012 16:30 2026168

Сравнение файлов по части имени
 
Помогите пожалуйста осилить задачу:
Существуют файлы вида:
Call1_9_86686567_1_31.nmf
Call1_10_86686567_1_31.nmf
Call1_11_86686567_1_31.nmf
В общем говоря если часть имени одинакова после второго символа "_", то убить все кроме одного.

Так как сначала предполагалось, что у них у всех одинаковый размер, и их можно уничтожать по этому признаку, то был составлен скрипт (ниже), который лазил по подпапкам и это добросовестно делал.
Но потом оказалось что размер может чуть отличаться, и единственный способ - обрабатывать их по имени. Только вот работать со буквами оказалось совсем тяжко. :(
Помогите пожалуйста доработать.

@(
for /f "tokens=*" %%i in ('dir /b /s /ad') do (
pushd "%%i"
for /f "delims=" %%f in ('dir/b/a-d/os') do @(
if defined $fz (set/a "$fc=$fz-%%~zf"
call set "$fc=%%$fc:0=%%"
if not defined $fc del "%%f")
set "$fz=%%~zf")))

kiripanda 16-11-2012 21:46 2027046

Код:

@echo off &setlocal enableextensions

for /f "delims=" %%i in ('dir /b/s/ad') do (
        pushd "%%i"
        call :list
        popd
)
goto :eof

:list
if exist list.tmp del /q list.tmp
for /f "delims=" %%a in ('dir /b/a-d Call1_*_*.nmf') do (
        for /f "tokens=2,* delims=_" %%b in ("%%a") do if not "%%~nc"=="" echo "%%c" "%%a" >>list.tmp
)
set digs=""
for /f "tokens=1,*" %%a in ('sort list.tmp') do call :del_dups %%a %%b
del /q list.tmp
goto :eof

:del_dups
if %digs% == %1 del /q %2
set digs=%1
goto :eof


sampir 18-11-2012 19:57 2027815

Kiripana, огромное Вам спасибо!!! Работает на задаче без всяких исправлений, как есть. Сегодня уже проходил боевое применение на массиве звонков. Все отлично! Еще раз большое спасибо, спасли кучу времени и нервов, из-за возможных ошибок ручной работы.


Время: 12:47.

Время: 12:47.
© OSzone.net 2001-