Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Contributor


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

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


Цитата subuday77:
Первые 5 цифр номер лицензии, 3 цифры - номер архива, расширение показывает, с какого сервера файл. Собственно в одном массиве первые 5 цифр чаще всего одинаковыми, кроме случаев, когда на одной машине работают несколько клиентов. Но длина имени всегда 5+3 . 3
Вот решение, если имена файлов (первые 5 знаков) в папке возможны разные, при этом:

-имена файлов 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!
				)
			)
		)

	)
)
Вместо E:\DDDDDDDDD\bbbb пропишите свой путь без \ и БЕЗ ПРОБЕЛОВ в конце строки
Если нумерация в имени обязательно должна начинаться с 001,
читать дальше »
то вместо имеющегося надо написать цикл
Код: Выделить весь код
FOR /L %%i IN (1001,1,!NN2!) DO (
хотя, в принципе, в этом случае батник можно упростить
читать дальше »
Код: Выделить весь код
@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 NN2=1!N:~-3!
	Set N=!N:~0,5!
	If /I Not "!Name!"=="!N!" (
		Set Name=!N!

		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 (1001,1,!NN2!) DO (
					Set FNo=%%i
					Set FNo="%Where%\!Name!!FNo:~-3!!Ext!"
					If Not Exist !FNo! Echo !FNo!
				)
			)
		)

	)
)

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


Последний раз редактировалось megaloman, 17-05-2013 в 22:42.


Отправлено: 21:49, 17-05-2013 | #9