Как мы можем использовать текущий путь к каталогу (% ~ dp0) с командой «ren» в пакетном файле?

Я хочу переименовать файл, который присутствует в подкаталоге, и известная часть имени файла — «.log». Когда я пытаюсь что-то вроде ниже

ren subdirectory\*.log* file2.txt

or

ren .\subdirectory\*.log* file2.txt

Я получаю сообщение об ошибке: The syntax of the command is incorrect. У меня есть два вопроса:

  1. Нужно ли всегда указывать полный путь в команде ren для файла1?

  2. Если да, то как я могу указать полный путь, если я не хочу его жестко кодировать?

Я узнал, что мы можем использовать '%~dp0' для получения текущего пути к каталогу, но я не знаю, как его использовать с 'ren'.


person Yash    schedule 08.09.2015    source источник
comment
Попробуйте добавить кавычки: ren "subdirectory/file1.txt" file2.txt   -  person wOxxOm    schedule 08.09.2015
comment
@wOxxOm Я пробовал с кавычками, и это сработало! Спасибо! :)   -  person Yash    schedule 08.09.2015


Ответы (3)


добавление кавычек будет работать:

ren  "subdirectory\*.log*"  file2.txt

or

ren  ".\subdirectory\*.log*"  file2.txt

Спасибо wOxxOm!

person Yash    schedule 08.09.2015

Если вы хотите использовать относительный путь и / неверен в Windows, используйте вместо этого \.

Если вы хотите найти правильный относительный путь, используйте команду dir

пример:

dir .\
dir ..\..\
dir \
dir .
dir ..

Обновить

ren subdirectory\*.log* file2.txt

Ваша маска переименования кажется опасной!

Я не знаю, можете ли вы переименовать много файлов с подстановочным знаком маски в одно и то же имя. Я думаю, что он переопределит все файлы в один или, по крайней мере, объединит их в один файл, но не уверен. Если вы хотите увидеть несколько примеров маски переименования, посмотрите это: Как команда Windows RENAME интерпретирует подстановочные знаки?

ОБНОВЛЕНИЕ

Небольшая партия, чтобы увидеть вашу маску в действии:

@echo off

md Somefolder
echo some content into _file1.log>_file1.log
echo some content into _file2.log>_file2.log
echo some content into _file3.log>_file3.log
echo some content into _file999.log>_file999.log

dir Somefolder
pause>NUL

REM Correct
ren Somefolder\_file???.log _file???.txt
dir Somefolder
pause>NUL

REM Incorrect because it override _file???.txt into one _file1.log
ren Somefolder\_file???.txt _file1.log
dir Somefolder

pause
person Paul    schedule 08.09.2015
comment
Интересно, однако, что / можно использовать для запуска программ, когда в кавычках: "c:/windows/explorer" запустит Проводник. - person wOxxOm; 08.09.2015
comment
@wOxxOm не в моих окнах. пример: type ../somefile.txt получение ошибки вместо type ..\somefile.txt - person Paul; 08.09.2015
comment
Да, я отредактировал комментарий, так как сначала меня подвела память. - person wOxxOm; 08.09.2015
comment
@Paul извините за мою ошибку. Я попробовал только косую черту, но по ошибке обновил косую черту в вопросе. Я обновил вопрос. Кстати, спасибо, что указали на это. - person Yash; 08.09.2015
comment
@Paul, спасибо за подробное объяснение. :) - person Yash; 14.09.2015

Удалить расширения для всех файлов *.log с относительным путем

rename ".\folder1\subfolder1\*.log" *.
person onets    schedule 05.02.2021