Файл не переименует сам? - PullRequest
0 голосов
/ 22 апреля 2011

Я пытаюсь научить мой .bat-файл переименовывать себя в текущую дату при каждом нажатии.

Может кто-нибудь сказать мне, почему это не работает?

@echo off
set timeme=%s%

RENAME %0 %timeme%.bat

Ответы [ 3 ]

1 голос
/ 22 апреля 2011

Как я уже сказал в своем комментарии, часть переименования работает нормально. Однако вы должны иметь в виду, что он также выдает сообщение об ошибке, и ваш пакетный скрипт завершает работу сразу после переименования. Таким образом, команда RENAME должна быть последней в вашем скрипте. (Тем не менее, если имя не меняется после переименования, сценарий также не завершается, и вы можете каким-то образом использовать это в своих интересах, но это другая история.)

Так что, если у вас есть проблемы с «обучением» вашего пакетного скрипта переименованию, я должен предположить, что он как-то связан с битом %s% вашего примера. И поскольку вы сказали, что пытаетесь установить новое имя на текущую дату, то, возможно, именно эта часть и является причиной проблемы. Поэтому я решил поделиться с вами своим подходом к этому конкретному переименованию.

Вот рабочий пример:

@ECHO OFF
SET timeme=%DATE:/=-%
SET timeme=%timeme: =-%
RENAME %0 %timeme%.bat

Здесь я использую вывод переменной окружения DATE. Вывод этой переменной отформатирован в соответствии с локальными настройками. На моем компьютере он отформатирован как ddd MM/dd/yyyy, поэтому %DATE% оценивается как Fri 04/22/2011.

Вы видите, что я не просто использую вывод, но и обрабатываю его каким-то образом. Фактически, я заменяю / и (пробел) на -, поэтому я могу использовать результат в качестве имени файла и делать это без необходимости заключать имя в двойные кавычки. Возможно, вам придется проверить вывод %DATE%, чтобы увидеть, нужно ли вам подставлять и другие символы.

Но вы также можете использовать вывод по-другому. Например, вы можете вырезать год, месяц и день из строки даты, объединить части и использовать полученную строку в качестве нового имени. Вот пример того, как это можно сделать (он упорядочивает детали в формате yyyyMMdd):

SET timeme=%DATE:~-4%%DATE:~4,2%%DATE:~7,2%

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

Чтобы получить больше информации о извлечении подстроки (а также о подстановке подстроки, как в моем предыдущем примере скрипта), вы можете ввести HELP SET из командной строки в любой время.

1 голос
/ 22 апреля 2011

Я думаю, что файл заблокирован во время выполнения вашего скрипта - вы не можете его переименовать. Так же, как если бы у вас был документ, открытый в Word. Лучшее, что вы можете сделать, это скопировать.

0 голосов
/ 22 апреля 2011

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

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

...