CMD/BAT - Пакетное переименование файлов на основе заданного списка

Ответить
Аватара пользователя
Iska

CMD/BAT - Пакетное переименование файлов на основе заданного списка

Сообщение Iska »

Народ, имеется набор различных файлов в папке (с подпапками). Нужно на основе примерно такого списка, вида:





Код:

Код: Выделить всё

    Папка 1       |       Папка 2
  старое имя:          новое имя:
fbr\fbr_linoleum     = floor\floor_floor1
crete\crete_bordur   = crete\crete_border2
crete\crete_stolb_a  = crete\crete_stolb
crete\crete_dirty_gr = crete\crete_floor3
и т.п.

Произвести пакетное переименование файлов. При условии, что по указанному пути в папке 1 есть файлы с указанными именами - переместить их в папку 2, переименовав согласно списку.



Вот как и в каком виде этот список прикурутить (желательно из внешнего файла) к cmd-шнику?
Аватара пользователя
Iska

Re: CMD/BAT - Пакетное переименование файлов на основе заданного списка

Сообщение Iska »

Как, чем готовится/будет готовиться этот список?Что делать, если в результате переименования окажется, что файл с таким именем уже существует?
Аватара пользователя
Iska

Re: CMD/BAT - Пакетное переименование файлов на основе заданного списка

Сообщение Iska »

1. Список соответствий файлов по именам уже подготовлен в виде txt файла.

2. Не окажется. В первой папке таких имен быть не может. Вторая папка пуста, в нее же будут перемещаться файлы согласно списку и структуре. Хотя, простенькую защиту можно состряпать. Совпадает имя - не переименовываем, ошибку пишем в консоль и идем дальше.
Аватара пользователя
Iska

Re: CMD/BAT - Пакетное переименование файлов на основе заданного списка

Сообщение Iska »

Цитата Stalker_AleX333:



1. Список соответствий файлов по именам уже подготовлен в виде txt файла.
CMD/BAT - Пакетное переименование файлов на основе заданного списка




Выкладывайте образец такого файла, упакованного в архив. И Вы ответили на другой вопрос. Свой же повторю, акцентировав:


Цитата Iska:



Как, чем готовится/будет готовиться этот список?
CMD/BAT - Пакетное переименование файлов на основе заданного списка




Программным образом готовится, неким приложением, ручками?
Аватара пользователя
megaloman

Re: CMD/BAT - Пакетное переименование файлов на основе заданного списка

Сообщение megaloman »

Цитата Iska:



Выкладывайте образец такого файла, упакованного в архив
CMD/BAT - Пакетное переименование файлов на основе заданного списка







Если файл того вида, что как я понимаю

[spoiler]Код:
[/spoiler]

Код: Выделить всё

fbr\fbr_linoleum     = floor\floor_floor1  
crete\crete_bordur   = crete\crete_border2  
crete\crete_stolb_a  = crete\crete_stolb   
crete\crete_dirty_gr = crete\crete_floor3








то вот вариант

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@Echo Off
cls
Set "BoxIn=Z:\Box_In" 
Set "BoxOut=Z:\Box_Out" 
Set "Spisok=Z:\Box_In\список переименования.txt" 
FOR /F "usebackq tokens=1,2 delims==" %%i IN ("%Spisok%") DO If Not "%%j"=="" Call :ReMove "%%i"   "%%j"
pause
GoTo :Eof
:ReMove
	Call :Space "File1" %1
	Call :Space "File2" %2
	Set Action=Move "%BoxIn%\%File1%" "%BoxOut%\%File2%"
	Call :MakeDir "%BoxOut%\%File2%"
	If Not Exist "%BoxOut%\%File2%" (
		%Action% >nul || (Echo %Action% &Echo:)
	) Else (
		Echo %Action% & Echo File Exist "%BoxOut%\%File2%"  &Echo:
	)
GoTo :Eof
:Space
	Set "TMPbegin=%~2"
	:Begin
	Set "TMPname=%TMPbegin%"
	If "%TMPbegin:~0,1%"==" " Set "TMPbegin=%TMPbegin:~1,999%"
	If "%TMPbegin:~-1%"==" " Set "TMPbegin=%TMPbegin:~0,-1%"
	If Not "%TMPbegin%"=="%TMPname%" GoTo :Begin
	Set "%~1=%TMPname%"
GoTo :Eof
:MakeDir
	If Not Exist "%~dp1" Md "%~dp1" 
GoTo :Eof








Если файл того вида, что в вопросе, например

[spoiler]Код:
[/spoiler]

Код: Выделить всё

 Z:\Box_In          |    Z:\Box_Out\  
  старое имя:          новое имя:
fbr\fbr_linoleum     = floor\floor_floor1  
crete\crete_bordur   = crete\crete_border2  
crete\crete_stolb_a  = crete\crete_stolb   
crete\crete_dirty_gr = crete\crete_floor3    
и т.п.








то вот вариант

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@Echo Off
cls
Set "Spisok=Z:\Box_In\список переименования.txt" 
FOR /F "usebackq tokens=1,2 delims=|" %%i IN ("%Spisok%") DO If Not "%%j"=="" (
	Call :Space "BoxIn" "%%i"
	Call :Space "BoxOut" "%%j"
	GoTo :Continue
)
Echo OutBox not defined
Pause
GoTo :Eof
:Continue
FOR /F "usebackq tokens=1,2 delims==" %%i IN ("%Spisok%") DO If Not "%%j"=="" Call :ReMove "%%i"   "%%j"
pause
GoTo :Eof
:ReMove
	Call :Space "File1" %1
	Call :Space "File2" %2
	Set Action=Move "%BoxIn%\%File1%" "%BoxOut%\%File2%"
	Call :MakeDir "%BoxOut%\%File2%"
	If Not Exist "%BoxOut%\%File2%" (
		%Action% >nul || (Echo %Action% &Echo:)
	) Else (
		Echo %Action% & Echo File Exist "%BoxOut%\%File2%"  &Echo:
	)
GoTo :Eof
:Space
	Set "TMPbegin=%~2"
	:Begin
	Set "TMPname=%TMPbegin%"
	If "%TMPbegin:~0,1%"==" " Set "TMPbegin=%TMPbegin:~1,999%"
	If "%TMPbegin:~-1%"==" " Set "TMPbegin=%TMPbegin:~0,-1%"
	If Not "%TMPbegin%"=="%TMPname%" GoTo :Begin
	If "%TMPname:~-1%"=="\" Set "TMPname=%TMPname:~0,-1%"
	Set "%~1=%TMPname%"
GoTo :Eof
:MakeDir
	If Not Exist "%~dp1" Md "%~dp1" 
GoTo :Eof
Аватара пользователя
alpap

Re: CMD/BAT - Пакетное переименование файлов на основе заданного списка

Сообщение alpap »

Stalker_AleX333,

если делать правильно, то содержимое "file.txt" должно выглядеть так:



Код:

Код: Выделить всё

crete_bordur=crete_border2  
crete_stolb_a=crete_stolb   
crete_dirty_gr=crete_floor3

и при структуре входа такой:



Код:

Код: Выделить всё

Структура папок
C:\ПАПКА 1
└───crete
        crete_bordur.txt
        crete_dirty_gr.txt
        crete_stolb_a.txt

будет работать как надо такой код:



Код:

Код: Выделить всё

@echo off
set "d1=C:\Папка 1\crete"
set "d2=C:\Папка 2\crete"
set "f=file.txt"
Ответить

Вернуться в «Скриптовые языки администрирования Windows»