Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何在DOS中向文件名添加日期和时间?_Batch File - Fatal编程技术网

Batch file 如何在DOS中向文件名添加日期和时间?

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 但没有什么有用的。我收到

我想在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
但没有什么有用的。我收到错误,因为“文件名、目录名或卷标语法不正确”。

文件名中不允许冒号(
)。它保留用于在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