1

Тема: CMD/BAT: Переименование директорий путем перемещения слов имени

Доброго времени суток.
У меня есть директории в которых хранятся книги в архивах zip
имена директорий в кодировке 1251 следующего вида: Имя Фамилия

вячеслав афоничков
вячеслав васильев
далия трускиновская

Хочу поменять местами фамилию и имя что бы было:

афоничков вячеслав 
васильев вячеслав 
трускиновская далия

Пытался адаптировать под это дело вот этот код:

for /r %%i in (dir * /B /A-D) do @if exist "%%i" (if not %%i==%~dp0Compress.bat (start /wait winrar a -afzip -ep -df "%%i.zip" "%%i"))

но к сожалению не получилось.


подскажите как решить задачу?

2

Re: CMD/BAT: Переименование директорий путем перемещения слов имени

for /f "tokens=1,*" %%a in ('dir /b/ad') do move "%%a %%b" "%%b %%a"

3

Re: CMD/BAT: Переименование директорий путем перемещения слов имени

!k, спасибо!
все заработало как надо!

4

Re: CMD/BAT: Переименование директорий путем перемещения слов имени

В рамках этой же задачи возник ещё один вопрос:
Есть штатные средства что бы привести все строки к нижнему регистру?
Что бы поле выполнения:

for /f "tokens=1,*" %%a in ('dir /b/ad') do move "%%a %%b" "%%b %%a"

из исходника

далия трускиновская
Даниил Аксёнов
данила соловьёв

получить результат в нижнем регистре без заглавных букв.

5

Re: CMD/BAT: Переименование директорий путем перемещения слов имени

Можно аналогичным: CMD/BAT: транслитерация текста путём.

6 (изменено: MegaScrew, 2012-07-27 12:39:01)

Re: CMD/BAT: Переименование директорий путем перемещения слов имени

пытаюсь сделать на основе батника из коллекции CMD/BAT: смена регистра строки текста только не понимаю как в цикле FOR вызвать процедуру перед командой move
вот такой вариант не работает

for /f "tokens=1,*" %%a in ('dir /b/ad') do (move "%%a %%b" "call :LowerCase "%%b" "%b" call :LowerCase "%%a" "%a"")

и вот так тоже не работает

for /f "tokens=1,*" %%a in ('dir /b/ad') do (
    set str1=%%a
    set str2=%%b
    call :LowerCase "%str1%" "str1"
        call :LowerCase "%str2%" "str2"
    echo %str1%
    echo %str2%
)

7

Re: CMD/BAT: Переименование директорий путем перемещения слов имени

Вот этот код:

for /f "tokens=1,*" %%a in ('dir /b/ad') do (call :RenameMove "%%a" "%%b") 
goto exit

:RenameMove
     set str1=%~1
     set str2=%~2
     call :LowerCase "%str1%" "str1"
    call :LowerCase "%str2%" "str2"
    echo move "%~1 %~2" "%str1% %str2%"
exit /b 0

работает как надо но есть одна загвоздка. Если убрать echo переде move то получим:Процесс не может получить доступ к файлу, так как этот файл занят другим процессом. Видимо из за того что цикл его ещё не отпустил.
Подскажите как это можно обойти!

8

Re: CMD/BAT: Переименование директорий путем перемещения слов имени

Ура! Заработало!
Сегодня на свежую голову посмотрел код и увидел ошибку в строке

 move "%~1 %~2" "%str1% %str2%"

который привод к ошибке: Процесс не может получить доступ к файлу, так как этот файл занят другим процессом. После того как поменял str1 и str2 местами все заработало.