我正在尝试教我的.bat文件,以便在每次单击时将自身重命名为当前日期。
有人可以告诉我它为什么不起作用吗?
@echo off
set timeme=%s%
RENAME %0 %timeme%.bat
答案 0 :(得分:1)
我认为在执行脚本时文件已被锁定 - 您无法重命名它。就像在Word中打开文档一样。你能做的就是复制。
答案 1 :(得分:1)
正如我在评论中所说,重命名部分工作正常。但是,您应该记住,它也会产生错误消息,并且您的批处理脚本将在重命名后立即终止。因此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
。
答案 2 :(得分:0)
也许您可以将其复制到新名称并删除旧名称作为新文件中的第一个语句。
或者您可以创建一个单独的脚本,等待原始文件解锁然后重命名。将此脚本称为原始文件中的最后一个语句。