Компьютерный форум 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=290771)

lexxxyatina 11-11-2014 11:25 2427775

Копирование файлов из подкаталогов и их переименование в название папки
 
Всем привет! Понимаю, что тема избитая, и подобное на форуме обсуждалось. Что-то находил, использовал, но до конца разобраться не могу (это мои первые шаги в написании подобного). Прошу помощи, сроки жмут..

Суть задания:
имеется каталог с кучей подкаталогов в которых лежат pdf файлы. Необходимо скопировать pdf-ки на уровень выше и переименовать их также как называлась папка в которой они лежали.
Например есть папка d:\папка 1\папка 2\папка 3\1.pdf
Результат: d:\папка 1\папка 2\папка 3.pdf

Iska 11-11-2014 11:56 2427794

lexxxyatina, в папке «d:\папка 1\папка 2\папка 3» оказывается несколько pdf-файлов. Что делать?

lexxxyatina 11-11-2014 13:10 2427831

Iska, Копируем все и добавляем счетчик

megaloman 11-11-2014 15:18 2427915

Возможна ли ситуация
d:\папка 1\1.pdf
d:\папка 1\папка 2\2.pdf
d:\папка 1\папка 2\папка 3\3.pdf
То есть, .pdf содержится только в самой нижней папке пути, или в промежуточных тоже?

lexxxyatina 11-11-2014 15:26 2427921

megaloman, Добрый день! Нет, pdf файлы могут находиться только в самой нижней папке.

ps Случай, что в одной папке несколько пдф фалов редкий, поэтому желательно счетчик добавлять только для таких случаев) Если в папке один файл, то переименовывать в название папки без счетчика..
Надеюсь не запутал окончательно)

lexxxyatina 12-11-2014 15:52 2428496

Есть ли у кого какие мысли? :help:

megaloman 12-11-2014 20:23 2428624

Код:

@Echo Off

SetLocal EnableExtensions EnableDelayedExpansion

Set "Where=E:\Папка1"
Set "Maska=*.pdf"

For /F "usebackq delims=" %%A In (`Dir "%Where%\%Maska%" /B /s /A:-D 2^>nul`) Do Call :SubDir1 "%%A" "%%~dpA"

GoTo :Eof

:SubDir1
        Set S=%~2
        Set "S=%S:~0,-1%"
        Call :SubDir2 %1 "%S%" "%~n1" "%~x1"
GoTo :Eof

:SubDir2
        Set /A i=0
        Set "j="
:Continue
        Set "NewName=%~dp2%~n2!j!%~4"
        If Not Exist "!NewName!" (
                Move %1 "!NewName!"
                GoTo :Eof
        )
        Set /A i=!i!+1
        Set "j= !i!"
        GoTo :Continue
GoTo :Eof

Батник можно запускать на указанную директорию 1 раз, так как он сделан для случая, как Вы писали: " pdf файлы могут находиться только в самой нижней папке".
Батник при повторном запуске поднимает все пдф-файлы на уровень вверх, присваивая им соответственно другое имя.

lexxxyatina 13-11-2014 09:44 2428787

megaloman, Как же Вы мне помогли! Спасибо огромное! :clapping:


Время: 00:23.

Время: 00:23.
© OSzone.net 2001-