使用批处理文件创建文件夹

16

我需要编写一个批处理文件,使用当前日期和时间创建一个新文件夹作为文件夹名称。

我想到了以下代码:

for /f "tokens=1-3 delims=:," %%i in ("%TIME%") do md %DATE%-%%i.%%j.%%k

这段代码有什么缺陷吗?是否有更简便/更自然的方法来完成它?


顺便提一下,这里会创建两个目录。使用引号(md“%DATE%-%%i.%%j.%%k”)会更好。 - schnaader
8个回答

25
您可以使用子字符串和内置的%DATE%和%TIME%变量来实现此目的:
@echo OFF

:: Use date /t and time /t from the command line to get the format of your date and
:: time; change the substring below as needed.

:: This will create a timestamp like yyyy-mm-dd-hh-mm-ss.
set TIMESTAMP=%DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%-%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%

@echo TIMESTAMP=%TIMESTAMP%

:: Create a new directory
md "%1\%TIMESTAMP%"

这正是我在寻找的,这种方法对我来说似乎更自然。 - Yarik
1
非常有帮助!但需要注意的是,上述代码的用法假设只有一个参数:新文件夹的目标位置。如果直接使用此代码,则会在启动驱动器的根目录下创建一个带有时间戳的文件夹。 - Brown

6
我使用这个批处理文件。
for /F "tokens=1-4 delims=. " %%i in ('date /t') do (
set Day=%%i
set Month=%%j
set Year=%%k
)

for /F "tokens=1-4 delims=: " %%i in ('time /t') do (
set Hour=%%i
set Minute=%%j
set Second=%%k
)


md %1\%Year%-%Month%-%Day%

希望能帮到你。

请注意,如果禁用了命令扩展,时间 /t 将无法工作,但我想这并不会真正困扰你。(有关详细信息,请参见 http://www.pc1news.com/disabling-command-processor-extensions-824.html) - schnaader
我对批处理脚本不是很了解,我只是想要一个能够创建带有当前日期文件夹的批处理脚本,但还是谢谢您提供的信息。 - Codesmell
第二个for循环在我电脑上没有显示秒数,因为time /t输出只有8:12(没有秒)。 - Christian

1

一个简单的%time%不能工作的原因是因为它被:分隔,这在批处理脚本中是不允许的。但是这个应该可以正常工作:

对我来说它非常有效。

Rem Get Day,Mth & Year from %Date%
set Day=%Date:~0,2%
set Mth=%Date:~3,2%
set Yr=%Date:~6,4%
REM Get Hour and Min from %Time%
set Hour=%Time:~0,2%
if "%hour:~0,1%" == " " set hour=0%hour:~1,1%
set Min=%Time:~3,2%

mkdir %date%-%hour%.%min%

1

我无法让上述的很多方法都运行成功,不过我已经成功使用了原始帖子中的命令。

以下是我的版本:

for /f "tokens=1-3 delims=:/" %%i in ("%DATE%") do set DATESTAMP=%%i.%%j.%%k
@echo 目录将以此名称创建:
@echo backup.%DATESTAMP%
md backup.%DATESTAMP%
@echo 目录已创建,现在正在进行文件复制...
@echo 请确保电脑没有打开任何电子邮件或文档。
pause
cd backup.%DATESTAMP%
md "Shared Documents"
xcopy "c:\documents and settings\all users\documents\documents" "Shared Documents" /E /C /I /H /Q
@echo Documents 已完成。

等等 :)


0

您可以利用GNU sh-utils,使用date.exe的格式说明符:

for /f "delims=" %%a in ('date.exe +%%Y-%%m-%%d.%%H-%%M') do @set dd=%%a
md %dd%

这个解决方案对于那些使用本地化版本的Windows特别重要。

for循环只运行一次,但是它是必需的,因为没有更简单的方法来将变量赋值为从命令输出中获取的值。

使用date --help可以查看完整的格式说明列表。


0

这对我来说效果不错

dkdir foldername

cd foldername

dkdir %date% %time% 

cls

0
这是我的解决方案(基于lopkiju的修改)。它使用日期戳创建一个文件夹。如果已经存在同名文件夹,则附加一个整数以使其唯一。将其放入.bat文件中并传递父文件夹的路径。
在Windows 7 Home Premium x64中测试过。
REM Create a folder using the current date.  If such a folder already exists, append a number to make it unique.
@ECHO OFF
for /F "tokens=2-5 delims=/ " %%i in ('date /t') do (
set Day=%%j
set Month=%%i
set Year=%%k
)

set Path=%~1\%Year%-%Month%-%Day%
set /a inx=2

:LOOP
IF NOT EXIST "%Path%" GOTO CREATE
set Path=%~1\%Year%-%Month%-%Day% (%inx%)
set /a inx+=1
if %inx% gtr 9 goto :END REM Eh, giving up.
goto LOOP
:END

:CREATE
md "%Path%"
:END

你能提供一个逐步解释的资源吗?我在命令提示符中使用了帮助,但有点难以理解。 - Katana24

0

你是否尝试过使用日期和时间保存为 new_folder_maker.bat 的代码来创建一个新的文件夹生成器?

:start
@echo off
md new_folder_%date%_%time%
exit

2
你没有试过你自己的代码吗?显然它不能工作,因为%time%包含冒号,在一些小国家中日期包含斜杠,这两者在路径名中都是无效的。 - jeb
确实,这取决于时间和日期设置。 - bahrep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接