Batch file 如何在DOS中向文件名添加日期和时间?
我想在filename中添加日期和时间值,然后我想将该文件移动到nearby文件夹 在这里,我使用以下命令来捕获日期和时间:Batch file 如何在DOS中向文件名添加日期和时间?,batch-file,Batch File,我想在filename中添加日期和时间值,然后我想将该文件移动到nearby文件夹 在这里,我使用以下命令来捕获日期和时间: set dt=%date:~7,2%-%date:~4,2%-%date:~10,4%_%time:~,8% echo %dt% 然后我使用复制命令,如下所示: copy result_accnum.txt C:\ramki_windows\batch_practise\Query_stored\result_accnum_%dt%.txt 但没有什么有用的。我收到
set dt=%date:~7,2%-%date:~4,2%-%date:~10,4%_%time:~,8%
echo %dt%
然后我使用复制命令,如下所示:
copy result_accnum.txt C:\ramki_windows\batch_practise\Query_stored\result_accnum_%dt%.txt
但没有什么有用的。我收到错误,因为“文件名、目录名或卷标语法不正确”。文件名中不允许冒号(:
)。它保留用于在DOS路径名中分隔驱动器号等。您可以改为使用下划线():
请注意,在上午10点之前,没有前导零。如果这对您的文件名格式很重要,则可以按如下方式执行:
set hh=%time:~0,2%
if "%time:~0,1%"==" " set hh=0%hh:~1,1%
set dt=%date:~7,2%-%date:~4,2%-%date:~10,4%_%hh%_%time:~3,2%_%time:~6,2%
10:00之前的时间,文件名将具有空格,即name_11_11_2014_9_45.txt,复制将失败。您需要添加报价,即copy name.txt“name%dt%.txt”
这会将其计算为date_hour_min_sec,并将其存储在名为datetime的变量中。
e、 g
如果您知道如何在DOS中使用此datetime变量,则可以将其直接附加到文件名中(简单:
set filename=sampletextfor\uu%datetime%.txt
将为您提供sampletextfor\u 24042015\u 19\u 10\u 12.txt
或任何文件)
它是如何工作的?
for命令遍历由%date%%time%%形成的字符串date%%time%提供cmd(系统变量)中的日期时间值。
标记根据分隔符指定要拾取哪些元素。
分隔符指定了作为一个新元素所考虑的内容,例如:这里有熟食店。另外“”(空格)是一个分隔符(您可以看到我在/(后面)留下了一个分隔符)
希望有帮助,谢谢!:) 上面潜伏者的回答是正确的,但HH只需要前两个字符,或者如果小时少于2位,您将在文件名中获得空格
set hh=%time:~0,2%
if "%time:~0,1%"==" " set hh=0%hh:~1,1%
set dt=%date:~7,2%-%date:~4,2%-%date:~10,4%_%hh:~0,2%_%time:~3,2%_%time:~6,2%
对于喜欢MM dd yyyy的人
set hh=%time:~0,2%
if "%time:~0,1%"==" " set hh=0%hh:~1,1%
set dt=%date:~4,2%-%date:~7,2%-%date:~10,4%_%hh:~0,2%_%time:~3,2%_%time:~6,2%
这是为我工作的完整批处理文件
@echo off
@SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "tokens=1-8 delims=:./ " %%G IN ("%date%_%time%") DO (
SET datetime=%%G%%H%%I_%%J_%%K
)
copy result_accnum.txt "C:\ramki_windows\batch_practise\Query_stored\result_accnum_!datetime!.txt"
@echo off
@SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "tokens=1-8 delims=:./ " %%G IN ("%date%_%time%") DO (
SET datetime=%%G%%H%%I_%%J_%%K
)
SET dirname=C:\ramki_windows\batch_practise\Query_stored\result_accnum_!datetime!
if not exist %dirname% mkdir %dirname%
copy result_accnum.txt %dirname%\result_accnum_!datetime!.txt
创建的文件名为result_accnum_Fri0106_2017_14_54.txt
虽然要根据时间戳创建目录,但下面的方法对我很有效
@echo off
@SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "tokens=1-8 delims=:./ " %%G IN ("%date%_%time%") DO (
SET datetime=%%G%%H%%I_%%J_%%K
)
copy result_accnum.txt "C:\ramki_windows\batch_practise\Query_stored\result_accnum_!datetime!.txt"
@echo off
@SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "tokens=1-8 delims=:./ " %%G IN ("%date%_%time%") DO (
SET datetime=%%G%%H%%I_%%J_%%K
)
SET dirname=C:\ramki_windows\batch_practise\Query_stored\result_accnum_!datetime!
if not exist %dirname% mkdir %dirname%
copy result_accnum.txt %dirname%\result_accnum_!datetime!.txt
文件名中不允许使用冒号(:
)。它保留用于在DOS路径名中分隔驱动器号等。请您告诉我一点清楚的信息,因为冒号(:)表示我的目标路径的驱动器号。但是对于上面提到的复制命令,如果我单独删除“%dt%”,那么它工作正常…如下面的复制结果\u accnum.txt C:\ramki\u windows\batch\u practice\Query\u storage\result\u accnum\u 1.txt文件已复制。您的意思是您有一个名为22-04-2014\u 13:20:30
的文件,您对此满意吗?当我尝试创建这样一个文件名时,我得到了您描述的错误。作为旁注,这显然是针对windows cmd提示符的,因为DOS仅支持8.3文件名。接受的答案不可靠,因此这是我使用的解决方案。它与Sarthak的解决方案相同。在第二个示例中,我在%hh%之后得到了一个尾随空格,这对于文件名来说是不方便的。为了克服这个问题,我使用set dt=%dt:=%@计算机不知道为什么会看到一个空格。当我使用第二种方法时,我不会在%hh%
后获得尾随空格。我在小时为1位数时获得它。Windows 7。@电脑管理员我刚试过,无法重现您的问题。目前的时间是早上6点49分。我得到,21-07-2017\u 06\u 49\u 21
作为dt
的结果字符串。
@echo off
@SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "tokens=1-8 delims=:./ " %%G IN ("%date%_%time%") DO (
SET datetime=%%G%%H%%I_%%J_%%K
)
SET dirname=C:\ramki_windows\batch_practise\Query_stored\result_accnum_!datetime!
if not exist %dirname% mkdir %dirname%
copy result_accnum.txt %dirname%\result_accnum_!datetime!.txt