Показать полную графическую версию : [решено] Смена расширения
Ragnazar
29-07-2012, 22:50
Мне нужно скриптом изменять расширения всех файлов на .java
Не какого-то одного, а всю папку (*.*)
Ragnazar
29-07-2012, 22:52
Если сделать
ren *.txt *.java
То название ведь не изменится?
Anonymоus
29-07-2012, 23:20
ren *.txt *.java »
Нет, этот код работать не будет. Используйте вот такую конструкцию:
For /F "delims=" %%A In ('Dir "*.txt" /B') Do Ren "%%A" "%%~nA.java"
Ragnazar, как быть в случае наличия одинаковых имён:
0001.txt
0001.doc
0001.xls
?
Ragnazar
31-07-2012, 15:16
Незнаю. Я "For" вообще не понимаю
А при чём тут «for»? Вопрос про поведение гипотетического пакетного файла: что он должен делать при совпадении имён файлов?
Ragnazar
03-08-2012, 12:14
Ну исходя из этой команды, расширение сменится только у txt файлов. Если будут другие, имеющие другое расширение то пакет их просто проигнорирует.
Burning Hell
13-11-2017, 10:45
Всем доброго времени суток.
У меня схожая проблема, но разница в том, что мне хотелось бы в заданной директории (и поддиректориях) поменять расширения у cmd-скриптов с (.cmd) на (.txt). Подскажите как это сделать циклом for?
Burning Hell, там сверху код приведён и вопрос задан.
Burning Hell
13-11-2017, 11:26
Iska, подскажите, что такое %%A и как задать свою директорию, вернее свой путь к директории? Батник у меня лежит в одной директории, а файлы, которые я хочу переименовать лежат вообще в другом месте.
Burning Hell, попробуйте так:
for /r "Путь" %%i in ("*.cmd") do ren "%%i" "%%~ni.txt"
Но вообще для таких вещей стоит освоить какой-нибудь сторонний файловый менеджер, наподобие Far Manager, Total Commander и т.п.
megaloman
13-11-2017, 12:40
Burning Hell, ИМХО, лучше переименовывать не
файл.cmd -> файл.txt
а лучше
файл.cmd -> файл.cmd.txt
Это позволит застраховаться от непреднамеренного запуска командного файла, но при этом позволит легко отличить обычные txt файлы от переименованных cmd и, при необходимости, их найти.
Изменил решение Iska, не тестировалfor /r "Путь" %%i in ("*.cmd") do ren "%%i" "%%~nxi.txt"
Или, если эту строку использовать не в командном файле, а выполнить в командном окне:for /r "Путь" %i in ("*.cmd") do ren "%i" "%~nxi.txt"
Burning Hell
13-11-2017, 13:02
Но вообще для таких вещей стоит освоить какой-нибудь сторонний файловый менеджер, наподобие Far Manager, Total Commander и т.п. »
Спасибо за совет, я про это не подумал. Надо попробовать.
megaloman, подскажите, пожалуйста, по вашему коду. Что такое %%~nxi?
Что такое %%~nxi? »
…
Операции подстановки ссылок на переменные команды FOR
также расширены. Допускается применение следующих
синтаксических конструкций:
%~I - из переменной %I удаляются обрамляющие кавычки (")
%~fI - переменная %I расширяется до полного имени файла
%~dI - из переменной %I выделяется только имя диска
%~pI - из переменной %I выделяется только путь к файлу
%~nI - из переменной %I выделяется только имя файла
%~xI - из переменной %I выделяется расширение имени файла
%~sI - полученный путь содержит только короткие имена
%~aI - переменная %I расширяется до атрибутов файла
%~tI - переменная %I расширяется до даты /времени файла
%~zI - переменная %I расширяется до размера файла
%~$ПУТЬ:I - проводится поиск по каталогам, заданным в
переменной среды ПУТЬ, и переменная %I
заменяется на полное имя первого найденного
файла. Если переменная ПУТЬ не определена или
в результате поиска не найден ни один файл,
то этот модификатор заменяется на пустую
строку.
При объединении нескольких операторов можно получить
следующие результаты:
~dpI - переменная I раскрывается в имя диска и путь
~nxI - переменная I раскрывается в имя файла и его
расширение
~fsI - переменная I раскрывается в полный путь с
короткими именами
~dp$ПУТЬ:I - проводится поиск по каталогам, заданным в
переменной среды ПУТЬ, и переменная I
раскрывается в имя диска и путь к первому
найденному файлу.
~ftzaI - переменная I раскрывается в строку, подобную
выдаваемой командой DIR
…
Burning Hell
13-11-2017, 13:50
Iska, О_____________________о. Как же все в cmd не похоже на другие языки программирования.
megaloman, спасибо огромное. Отлично работает.
Burning Hell
13-11-2017, 14:22
Подскажите, как сделать обратное преобразование имен, т.е. вырезать".txt" из всех имен?
Как я понимаю должно быть что-то типа такого:
(For /F "usebackq tokens=1* delims==" %%i In ("*.cmd.txt") Do (If "%%i"==".txt" (Echo %%j) Else (If "%%j"=="" (Echo %%i) Else Echo %%i=%%j))) »
, но не уверен...
Непосредственно для командной строки:
for /r "Путь" %i in ("*.cmd.txt") do @ren "%i" "%~ni"
Burning Hell
13-11-2017, 15:38
Iska, а зачем собака перед ren?
И еще такой вопрос. Можно ли как-то научить этот код обрабатывать директорию, которая лежит в шаре? Т.е., путь относительный.
Iska, а зачем собака перед ren? »
Чтобы не отображались сами исполняемые в цикле разбора команды «ren».
Помните, в пакетных файлах пишут:
@echo off
…
«echo off» подавляет отображение команд пакетного файла, исполняемых интерпретатором команд. А чтобы при исполнении не отображалась сама команда «echo off» — её предваряют символом «@». Вот тут то же самое.
Burning Hell
13-11-2017, 15:55
«echo off» подавляет отображение команд пакетного файла, исполняемых интерпретатором команд. А чтобы при исполнении не отображалась сама команда «echo off» — её предваряют символом «@». Вот тут то же самое. »
Так вот зачем пишут эту штуку, с echo) Я никогда не знал этого, если честно, т.к. очень мало пишу на cmd. Спасибо!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.