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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переименование файлов

Ответить
Настройки темы
CMD/BAT - [решено] Переименование файлов

Новый участник


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

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


Добрый день! Помогите, пожалуйста, реализовать следующее:

Есть некий каталог с файлами. Нужно их переименовать согласно списку, который содержится в текстовом файле:

строка 1 - текущее имя файла 1
строка 2 - новое имя файла 1
строка 3 - текущее имя файла 2
строка 4 - новое имя файла 2
и т.д.

Затык в чтении второго параметра (во что переименовывать) для команды ren.

Отправлено: 12:09, 27-02-2020

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


shraybikus, пример файла приведите, есть ли там пути, расширения и т. д.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 14:39, 27-02-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


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

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


Пример файла:

14117
Приложение № 1.pdf
08278
Приложение № 2.xlsx
32545
Приложение № 3.docx
29721
Приложение № 4.docx
32730
Приложение № 5.docx
00142
Приложение № 6.docx


Каталог, имена в котором надо "восстановить":

00142
08278
14117
22
29721
32545
32730

Последний раз редактировалось shraybikus, 27-02-2020 в 14:54.


Отправлено: 14:48, 27-02-2020 | #3


Аватара для Elven

Ветеран


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

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


Код: Выделить весь код
for /f "tokens=1-2" %%A in (не_помню_как_файл_указывать_в_качестве_источника,_вроде_просто_без_кавычек?) do (
echo ren %%A %%B
)
cmd под рукой нет, виртуалку ради этого ставить лень. плюс-минус должно как-то так заработать. если я еще синтаксис cmd не забыл.
а не удобнее имя против имени писать? ну этж убицца можно такой файл читать. кмк если строка имеет вид "старое имя" "новое имя" - гораздо удобнее.

Отправлено: 14:48, 27-02-2020 | #4


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Powershell:
Код: Выделить весь код
$path = 'd:\temp'
$file = gc "$path\test.txt"

$counter = 1
$file |% {
if ($counter % 2 -eq 1) {[array]$oldName += $_}
else {[array]$newName += $_}
$counter++
}

$counter = 0
$oldname |% {
Rename-Item (get-item "$path\$_") -NewName $newName[$counter]
$counter++
}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 14:59, 27-02-2020 | #5


Новый участник


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

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


Цитата Elven:
должно как-то так заработать »
Я сделал пока вместо ren команду echo и получилось вот что:

14117
Приложение №
08278
Приложение №
32545
Приложение №
29721
Приложение №
32730
Приложение №
00142
Приложение №
Для продолжения нажмите любую клавишу . . .

Не взлетело.

Можно и в одну строку, но в именах файла есть пробелы, как быть с ними?

Последний раз редактировалось shraybikus, 27-02-2020 в 15:40.


Отправлено: 14:59, 27-02-2020 | #6


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата DJ Mogarych:
Powershell: »
Если говорить о powershell, то для данной задачи проще использовать возможности get-content:
Код: Выделить весь код
gc file.txt -r 2 |%{$_[0] + " ~ " + $_[1]}

-------
scio me nihil scire. Ѫ


Отправлено: 15:31, 27-02-2020 | #7


Новый участник


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

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


Если бы мне нужно было решение на ps, то я бы и поместил свой вопрос в соответствующий раздел.
Нужно именно CMD/BAT.

Такая конструкция тоже не работает:

Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFolder=1

for /f "tokens=1-2 delims=" %%a in (list) do (

	echo %%a "b=" %%b

)
pause
exit /b
14117 "b="
Приложение № 1.pdf "b="
08278 "b="
Приложение № 2.xlsx "b="
32545 "b="
Приложение № 3.docx "b="
29721 "b="
Приложение № 4.docx "b="
32730 "b="
Приложение № 5.docx "b="
00142 "b="
Приложение № 6.docx "b="
Для продолжения нажмите любую клавишу . . .


Цикл выполняется дважды, и в переменную b похоже ничего не передается.

Отправлено: 15:38, 27-02-2020 | #8


Аватара для Elven

Ветеран


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

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


это потому что для cmd пробел это тоже разделитель. можно попробовать вот так если названия каждое в своей строке:
Код: Выделить весь код
for /f "tokens=1-2 delims=" %%A in (всё_ещё_не_помню_как_файл_указывать_в_качестве_источника,_вроде_просто_без_кавычек?) do (
echo ren %%A %%B
)
или если названия в строку и, например, через подчеркивания записаны то:
Код: Выделить весь код
for /f "tokens=1-2 delims=_" %%A in (всё_ещё_не_помню_как_файл_указывать_в_качестве_источника,_вроде_просто_без_кавычек?) do (
echo ren %%A %%B
)
вариант файла с именами файлов:

Код: Выделить весь код
14117_Приложение № 1.pdf
08278_Приложение № 2.xlsx
32545_Приложение № 3.docx
29721_Приложение № 4.docx
32730_Приложение № 5.docx
00142_Приложение № 6.docx


Цитата shraybikus:
Я сделал пока вместо ren команду echo и получилось вот что: »
а это шикарно. я вообще-то перед ren - echo написал не просто так.

Последний раз редактировалось Elven, 27-02-2020 в 15:49.


Отправлено: 15:43, 27-02-2020 | #9


Новый участник


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

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


Цитата Elven:
можно попробовать вот так если названия каждое в своей строке: »
Как я выше писал, не прёт. В переменную В не передаётся значение следующей строки, в итоге цикл выполняется только по А
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFolder=1

for /f "tokens=1-2 delims=" %%A in (list) do (
echo "A=" %%A "B=" %%B

)
pause
exit /b    

"A=" 14117                       "B="
"A=" Приложение № 1.pdf "B="
"A=" 08278                       "B="
"A=" Приложение № 2.xlsx "B="
"A=" 32545                       "B="
"A=" Приложение № 3.docx "B="
"A=" 29721                       "B="
"A=" Приложение № 4.docx "B="
"A=" 32730                       "B="
"A=" Приложение № 5.docx "B="
"A=" 00142                       "B="
"A=" Приложение № 6.docx "B="
Для продолжения нажмите любую клавишу . . .
Цитата Elven:
а это шикарно. я вообще-то перед ren - echo написал не просто так. »
Не знаю, что тут шикарного, но оно не прёт в любом варианте:

ren 14117
ren Приложение № 1.pdf
ren 08278
ren Приложение № 2.xlsx
ren 32545
ren Приложение № 3.docx
ren 29721
ren Приложение № 4.docx
ren 32730
ren Приложение № 5.docx
ren 00142
ren Приложение № 6.docx
Для продолжения нажмите любую клавишу . . .

Отправлено: 15:50, 27-02-2020 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переименование файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Переименование файлов f1rstonlyone@vk Скриптовые языки администрирования Windows 6 20-12-2017 16:20
CMD/BAT - переименование файлов Alexander_88 Скриптовые языки администрирования Windows 10 25-07-2017 21:30
CMD/BAT - Переименование файлов gremlintv2 Скриптовые языки администрирования Windows 3 27-06-2016 23:42
CMD/BAT - Переименование файлов Verilog Скриптовые языки администрирования Windows 4 10-12-2014 14:55
Переименование файлов B1010 Видео и аудио: обработка и кодирование 0 28-09-2014 11:38




 
Переход