Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
2 / 2 / 0
Регистрация: 09.12.2015
Сообщений: 26
1

Переименовать файлы с определенным расширением на нескольких жестких дисках

23.04.2017, 12:40. Показов 1786. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Помогите разобраться чет не получается(
Суть такая: Нужен батник чтобы он находил все файлы с расширением .xml на нескольких жестких дисках (допустим С и D) и переименовывал их в db.xml (при этом если в одной папке больше таких файлов чем один то добавлял им цифру типо db.xml db1.xml db2.xml ... и т.д.) Заранее огромное спасибо!
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2017, 12:40
Ответы с готовыми решениями:

Переименовать файлы по маске на всех дисках
Здравствуйте, уважаемые форумчане. Заранее извиняюсь за возможно нубский вопрос. С bat файлами я...

Переименовать файлы в папке именем файла с расширением .swf
Добрый день. С данной темой не знаком, так что обращаюсь за помощью к вам! Имеется каталог с кучей...

Переименовать все файлы с расширением, указанным в параметре 1, в файлы с расширением, указанным в параметре 2
Необходимо создать командный файл, который будет переименовывать все файлы с расширением, указанным...

Вывод информации о существующих жестких дисках
Прошу помогите заранее спасибо

15
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
23.04.2017, 20:05 2
Теоритически это выглядит наверно так.Надо сравнивать пути файла который переименовывается сейчас с путем предыдущего файла,и если они совпадают,то приписавать цифру.
0
2 / 2 / 0
Регистрация: 09.12.2015
Сообщений: 26
23.04.2017, 20:10  [ТС] 3
а как в коде это реализовать?
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
24.04.2017, 00:07 4
Примерно так.Но он работает на всю глубину одного каталога
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
Setlocal EnableDelayedExpansion
for /r "%userprofile%\Desktop\Batch" %%c in (*.docx) do (
set "b=%%~dpc"
call :1 
)
pause
exit /b
:1
pushd "!b!"
for /f "delims=" %%k in ('dir /b  *.docx') do (
ren "%%~nxk" "p!h!.docx"
set /a h+=1
)
set h=
exit /b
-----------------------------------------
У меня нет желания проверять это на всем компе(Извините).
Возможно для вашего варианта будет работать этот код:
Для дисков C и D
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
Setlocal EnableDelayedExpansion
for %%a in (c,d) do (call :2 %%a)
pause
exit /b
:2
for /r "%~1:" %%c in (*.docx) do (
set "b=%%~dpc"
call :1 "%%c" 
)
exit /b
:1
pushd "!b!"
for /f "delims=" %%k in ('dir /b  *.docx') do (
ren "%%~nxk" "p!h!.docx"
set /a h+=1
)
set h=
exit /b
1
2 / 2 / 0
Регистрация: 09.12.2015
Сообщений: 26
27.04.2017, 12:52  [ТС] 5
Спасибо за ответ!

Но я проверил первый код но он не сработал( не поменял имя не одного файла( пробовал от админа и пихал сам батник с этим кодом в разные места тоже не помогло(

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

пробовал на Win 7 Макс x32

ХЗ может у меня руки крюки)

Добавлено через 20 часов 44 минуты
Можешь подсказать в чем проблема?
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
27.04.2017, 13:02 6
Лучший ответ Сообщение было отмечено valli_vasia как решение

Решение

Я не знаю в чем проблема.ТАм путь указан каталога который проверять надо.Может быть Вы полность скопировали код и не менял ипуть,а может быть Вы не поменяли расширение docx на свое.ЧО угодно может быть.Это я про первый код где указана только одна папка.

Добавлено через 8 минут
А во втором коде наверно ошибка есть.Попробуйте так.Надо поставить \ после двоиточая.ФОрум его почему то съедает.
Windows Batch file
1
"%~1:"
Но опять же.Я не пробывал работу второго кода.
1
2 / 2 / 0
Регистрация: 09.12.2015
Сообщений: 26
28.04.2017, 09:19  [ТС] 7
Спасибо огромное добрый человек! добавил \ и все заработало)
Помоги еще чутка) у нас есть еще сетевые диски если народ будет туда скидывать файлы которые нужно переименовать то что во втором коде дописать чтобы и на них искал?

Добавлено через 1 минуту
Ой еще забыл спросить как добавить во втором коде переименовывание скрытых файлов?

Очень благодарен за оказанную помощь!
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
28.04.2017, 13:11 8
Цитата Сообщение от valli_vasia Посмотреть сообщение
Ой еще забыл спросить как добавить во втором коде переименовывание скрытых файлов?
По такому же принципу?ф ф1 ф2?А переименовывать ,что скрытые что не скрытые в одно название?
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
28.04.2017, 16:23 9
можно так:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
for /f "delims=" %%a in ('dir /a-d/b/s "C:\*.xml" "D:\*.xml" "\\serv\fold\*.xml"') do call :# "%%a"
pause& exit
 
:#
 pushd "%~dp1"
  if not exist "db%n%%~x1" (echo f|xcopy /h "%~1" "db%n%%~x1") else (set/a n+=1& goto #)
  del /a /q "%~1"
 popd
exit /b
0
2 / 2 / 0
Регистрация: 09.12.2015
Сообщений: 26
28.04.2017, 21:51  [ТС] 10
Цитата Сообщение от ZoOoO Посмотреть сообщение
Цитата Сообщение от valli_vasia Посмотреть сообщение
Ой еще забыл спросить как добавить во втором коде переименовывание скрытых файлов?
По такому же принципу?ф ф1 ф2?А переименовывать ,что скрытые что не скрытые в одно название?
Да чтобы просто код учитывал скрытые файлы в папке и менял в тоже название по порядку все.
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
30.04.2017, 11:03 11
Лучший ответ Сообщение было отмечено valli_vasia как решение

Решение

Тестил на одном каталоге.Все работает.ВОт код на весь диск.Не тестил)Это вместе со скрытыми файлами.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off
Setlocal EnableDelayedExpansion
for %%a in (c:\,d:\) do (call :2 "%%a")
pause
exit /b
 
:2
for /f "delims=" %%A in ('dir "%~1*.docx" /a:a /b /s') do (
call :1 "%%~dpA"
)
exit /b
 
:1
if "!b!"=="%~1" (exit /b) else (pushd "%~1"&&for /f "delims=" %%B in ('dir *.docx /a:a /b') do (
echo %%~aB|findstr h&&attrib -h "%%B"&&ren "%%B" "p!m!.docx"&&attrib +h "%%~dpBp!m!.docx"&&set /a m+=1||ren "%%B" "p!m!.docx"&&set /a m+=1
)
)
set "b=%~1" 
set m=
popd
exit /b
Добавлено через 6 минут
чтоб Вас....Работает на весь диск....
1
2 / 2 / 0
Регистрация: 09.12.2015
Сообщений: 26
30.04.2017, 16:57  [ТС] 12
Цитата Сообщение от ZoOoO Посмотреть сообщение
Тестил на одном каталоге.Все работает.ВОт код на весь диск.Не тестил)Это вместе со скрытыми файлами.

@echo off
Setlocal EnableDelayedExpansion
for %%a in (c:\,d:\) do (call :2 "%%a")
pause
exit /b
:2
for /f "delims=" %%A in ('dir "%~1*.docx" /a:a /b /s') do (
call :1 "%%~dpA"
)
exit /b
:1
if "!b!"=="%~1" (exit /b) else (pushd "%~1"&&for /f "delims=" %%B in ('dir *.docx /a:a /b') do (
echo %%~aB|findstr h&&attrib -h "%%B"&&ren "%%B" "p!m!.docx"&&attrib +h "%%~dpBp!m!.docx"&&set /a m+=1||ren "%%B" "p!m!.docx"&&set /a m+=1
)
)
set "b=%~1"
set m=
popd
exit /b
Спасибо дружище) все работает! очень помог!
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
30.04.2017, 17:18 13
Цитата Сообщение от valli_vasia Посмотреть сообщение
все работает!
я знаю...
0
2 / 2 / 0
Регистрация: 09.12.2015
Сообщений: 26
30.04.2017, 17:48  [ТС] 14
А почему не работает другой код вставленный после этого?
То есть создаю батник вот с таким содержимым:

@echo off
Setlocal EnableDelayedExpansion
for %%a in (c:\,d:\) do (call :2 "%%a")
exit /b
:2
for /f "delims=" %%A in ('dir "%~1*.xml" /a:a /b /s') do (
call :1 "%%~dpA"
)
exit /b
:1
if "!b!"=="%~1" (exit /b) else (pushd "%~1"&&for /f "delims=" %%B in ('dir *.xml /a:a /b') do (
echo %%~aB|findstr h&&attrib -h "%%B"&&ren "%%B" "db!m!.xml"&&attrib +h "%%~dpBdb!m!.xml"&&set /a m+=1||ren "%%B" "db!m!.xml"&&set /a m+=1
)
)
set "b=%~1"
set m=
popd
exit /b





@echo off
SetLocal EnableExtensions
call :msg "Все файлы переименованы \nМожете запускать программу"
Exit /B
:msg
chcp 866 >NUL& for /F "delims=" %%a in ("%~1") do chcp 1251 >NUL& call :convert "%%~a"& chcp 866 >NUL& Exit /B
:convert
set "text=%~1"
(@for %%a in ("%text:\n=" "%") do @echo.%%~a) | msg *
Exit /B

И отрабатывает только первый код с переименованием а второй на вывод окна не срабатывает. Хотя по отдельности эти два кода в разных батниках работают на ура.

Чет я совсем нуб(
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
01.05.2017, 08:35 15
Лучший ответ Сообщение было отмечено valli_vasia как решение

Решение

Попробуй в четвертой строке написать goto 3,а в своем коде уберите первые две строки и вместо них запишите :3
1
2 / 2 / 0
Регистрация: 09.12.2015
Сообщений: 26
01.05.2017, 11:38  [ТС] 16
Спасибо огромнейшее!!! все заработало идеально!
0
01.05.2017, 11:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2017, 11:38
Помогаю со студенческими работами здесь

Как вывести информацию о жестких дисках, подключенных к системе, в текстовый файл?
Здравствуйте, как вывести информацию о жестких дисках, подключенных к системе в текстовый файл? И...

На дисках появляются файлы с расширением exe и pif
Здравствуйте, проблема в том что вирус блокирует всё что связано с названиями антивируса, убивает...

OpenFileDialog, отображать только файлы с определенным расширением
вызываю проводник и запоминаю выбранный файл в переменную следующим кодом OpenFileDialog ofd =...

Переименовать все файлы указанного каталога с расширением на заданную букву
Нужно написать скрипт, который бы мог "переименовать все файлы указанного каталога с расширением на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru