2011-04-22 148 views
0

我试图教我的.bat文件重命名为当前日期,每次点击。文件不会重命名?

有人可以告诉我为什么它不起作用吗?

@echo off 
set timeme=%s% 

RENAME %0 %timeme%.bat 
+0

我会说在该代码中明显缺乏任何AI是罪魁祸首:) – 2011-04-22 08:21:46

+0

重命名本身适用于我。 (我使用了一个任意字符串而不是'%s%'。) – 2011-04-22 09:35:13

回答

0

也许你可以将它复制到新名称并删除旧名称作为新文件中的第一条语句。

或者您可以创建一个等待原始文件解锁并重命名的独立脚本。将此脚本称为原始文件中的最后一个语句。

1

我认为当你的脚本被执行时文件被锁定 - 你不能重命名它。就像您在Word中打开文档一样。最好你可以做的是复制。

+0

nope nevermind我知道它%的随机%选项。尽管我想随机字母 – Meldrum 2011-04-22 08:54:32

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

+0

+1不错。不知道自我重命名实际上工作。 – 2011-04-22 17:30:25