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

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

Ветеран


Contributor


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

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


При такой постановке надёжнее выделять номер из имени исходного файла. Вот вариант решения (похоже, не очень элегантный)
Код: Выделить весь код
@Echo Off

SetLocal EnableExtensions EnableDelayedExpansion

FOR /D %%p IN ("D:\Папка номер 1\*.*") DO (
        Set From=%%p
        Set To=!From:D:\Папка номер 1=D:\Упорядоченная папка!
        Set NewName=%%~nxp

        If Not Exist "!To!\" md "!To!\" 
        
        FOR %%f IN ("%%p\*.*") DO (
		Call :Number "%%~nf"
		If Not !Num!==0 Copy "%%f" "!To!\!NewName!_!Num!%%~xf" >Nul
	)
)
GoTo :Eof

:Number

Set Num=0
Set N=%~1

Set NN=%N:~-1%
Set M=%N:~-2%
If "%M:~0,1%"=="_" Set Num=00%NN%& GoTo :Eof

Set NN=%N:~-2%
Set M=%N:~-3%
If "%M:~0,1%"=="_" Set Num=0%NN%& GoTo :Eof

Set NN=%N:~-3%
Set M=%N:~-4%
If "%M:~0,1%"=="_" Set Num=%NN%& GoTo :Eof
Ограничение: Пронумерованных файлов в папке не может быть более 999. При желании эту цифру можно увеличить. При отсутствии номера, символа _ перед ним, превышения числа ограничения файл скопирован не будет

Замечание насчет замены Copy на Move остаётся в силе

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


Последний раз редактировалось megaloman, 06-03-2013 в 00:09.


Отправлено: 23:59, 05-03-2013 | #11