|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Проверка последовательности в файлах. |
|
|
CMD/BAT - [решено] Проверка последовательности в файлах.
|
Новый участник Сообщения: 46 |
Профиль | Отправить PM | Цитировать Здравствуйте! Есть такая задача:
В некой папке есть файлы. Имена файлов - порядковый набор цифр. Расширение - буква и две цифры. Нужно проверить, идут ли файлы подряд или некоторых не хватает. Например: 12345001.В12 12345002.В12 12345004.В12 Не хватает 12345003.В12 Вторая беда в том, что расширения могут быть разными, соответственно номера файлов могут повторяться. Например: 12345001.В10 12345001.В12 12345002.В10 12345002.В12 12345003.В10 12345004.В10 12345004.В12 Всё ещё не хватает 12345003.В12 В принципе, можно руками вводить номер, с которого начинать проверять и расширение. Но я всё равно не знаю, как проверить, что оно идёт попорядку. Зарание благодарен за любую помощь! |
|
Отправлено: 14:55, 16-05-2013 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать subuday77, приведите пример имён реальных файлов: важно увидеть длину и выделить постоянную часть.
|
Отправлено: 17:14, 16-05-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать |
Отправлено: 17:23, 16-05-2013 | #3 |
Новый участник Сообщения: 46
|
Профиль | Отправить PM | Цитировать Iska, Оно так и выглядит. Первые 5 цифр номер лицензии, 3 цифры - номер архива, расширение показывает, с какого сервера файл. Собственно в одном массиве первые 5 цифр чаще всего одинаковыми, кроме случаев, когда на одной машине работают несколько клиентов. Но длина имени всегда 5+3 . 3
kiripanda, спасибо, но не вариант. Проверка выпоняется на машинах клиентов. |
Отправлено: 21:31, 16-05-2013 | #4 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать subuday77, для двух расширений файлов:
@ECHO OFF SET Folder=E:\Work\ SET Extension_1=.‚10 SET Extension_2=.‚12 SETLOCAL ENABLEDELAYEDEXPANSION FOR /F "tokens=1 delims=." %%I IN ('DIR %Folder% /B /O:N') DO ( SET Name=%%I GOTO # ) :# FOR /F "tokens=1 delims=." %%I IN ('DIR %Folder% /B /O:N') DO ( SET /A Skip=%%I-!Name!-1 IF !Skip! GEQ 1 ( FOR /L %%K IN (1,1,!Skip!) DO ( SET /A Missing_File=!Name!+%%K ECHO !Missing_File!%Extension_1% ECHO !Missing_File!%Extension_2% ) IF NOT EXIST %Folder%%%I%Extension_1% ECHO %%I%Extension_1% IF NOT EXIST %Folder%%%I%Extension_2% ECHO %%I%Extension_2% SET Name=%%I ) ELSE ( IF NOT EXIST %Folder%%%I%Extension_1% ECHO %%I%Extension_1% IF NOT EXIST %Folder%%%I%Extension_2% ECHO %%I%Extension_2% SET Name=%%I )) PAUSE>nul |
|
Отправлено: 03:13, 17-05-2013 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата subuday77:
Можно, например, перетаскивать какой-либо файл (из набора потребных для проверки) на пакетный файл, а пакетный файл по переданному имени уже сам будет определять папку, постоянную часть имени и расширение, иначе — запрашивать то. другое и третье в диалоге: |
|
Отправлено: 05:26, 17-05-2013 | #6 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать subuday77, вот простой и почти универсальный вариант:
@ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION SET Folder=E:\Work SET n=0 FOR /F "tokens=2 delims=." %%I IN ('DIR "%Folder%" /B /O:E') DO IF NOT "%%I"=="!Extension!" SET Extension=%%I&&SET /A n=!n!+1&&SET Extension_!n!=%%I SET Max_Name=0 FOR %%I IN ("%Folder%\*") DO IF %%~nI GEQ !Max_Name! SET Max_Name=%%~nI SET Min_Name=!Max_Name! FOR %%I IN ("%Folder%\*") DO IF %%~nI LEQ !Min_Name! SET Min_Name=%%~nI FOR /L %%I IN (!Min_Name!,1,!Max_Name!) DO FOR /F "tokens=2 delims==" %%J IN ('SET Extension_') DO IF NOT EXIST "%Folder%\%%I.%%J" ECHO %%I.%%J PAUSE>nul |
Последний раз редактировалось Georgio, 17-05-2013 в 15:46. Причина: добавление комментария Отправлено: 13:11, 17-05-2013 | #7 |
Новый участник Сообщения: 46
|
Профиль | Отправить PM | Цитировать Iska, Georgio, спасибо! В воскресенье выйду на работу, буду пробовать.
|
Отправлено: 17:09, 17-05-2013 | #8 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать Цитата subuday77:
-имена файлов 5+3, где 5 знаков префикс, 3 знака номер, -для каждого префикса могут быть свой набор расширений, -начало и конец нумерации для каждого префикса может быть своя, @Echo Off cls SetLocal EnableExtensions EnableDelayedExpansion Set Where=E:\DDDDDDDDD\bbbb Set Name= FOR /F "usebackq delims=" %%n IN (`Dir "%Where%\*.*" /B /O:N`) DO ( Set N=%%~nn Set NN1=1!N:~-3! Set N=!N:~0,5! If /I Not "!Name!"=="!N!" ( Set Name=!N! Set NN2="" FOR /F "usebackq delims=" %%m IN (`Dir "%Where%\!Name!???.*" /B /O:-N`) DO If !NN2!=="" Set NN2=%%~nm Set NN2=1!NN2:~-3! Set Ext= FOR /F "usebackq delims=" %%m IN (`Dir "%Where%\!Name!???.*" /B /O:E`) DO ( If /I Not "!Ext!"=="%%~xm" ( Set Ext=%%~xm FOR /L %%i IN (!NN1!,1,!NN2!) DO ( Set FNo=%%i Set FNo="%Where%\!Name!!FNo:~-3!!Ext!" If Not Exist !FNo! Echo !FNo! ) ) ) ) ) Если нумерация в имени обязательно должна начинаться с 001, хотя, в принципе, в этом случае батник можно упростить |
|
------- Последний раз редактировалось megaloman, 17-05-2013 в 22:42. Отправлено: 21:49, 17-05-2013 | #9 |
Ветеран Сообщения: 1758
|
Мой вариант
@echo off setlocal pushd "C:\test" for /f %%i in ('dir /b') do set "ext_%%~xi=%%~xi" for /f "tokens=2 delims==" %%i in ('set ext_') do call:1 "%%i" popd goto:eof :1 for %%i in (*%~1) do if not defined min (set min=%%~ni) else (set max=%%~ni) for /l %%i in (%min%,1,%max%) do if not exist %%i%~1 echo %%i%~1 for %%i in (min max) do set "%%i=" |
Отправлено: 12:48, 18-05-2013 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Esc-последовательности в BAT-файлах (ansi.sys) | AndreyY89 | Microsoft Windows 2000/XP | 8 | 16-03-2012 07:05 | |
Выполнение последовательности действий нажатий кнопок мышки | DREDivan | AutoIt | 3 | 05-09-2010 19:25 | |
ASCII-последовательности | lunas | Программирование и базы данных | 2 | 09-02-2003 23:54 | |
ASCII-последовательности | lunas | Хочу все знать | 6 | 05-02-2003 14:24 |
|