【问题标题】:Creating folder using bat file使用bat文件创建文件夹
【发布时间】:2010-10-09 03:42:51
【问题描述】:

我需要编写一个 bat 文件,该文件使用当前日期和时间作为文件夹名称创建一个新文件夹。 我想出了以下几点:

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

这段代码有任何缺陷吗?有更简单/更自然的方法吗?

【问题讨论】:

  • 顺便说一下,这里创建了两个目录。使用引号 (md "%DATE%-%%i.%%j.%%k") 会更好。

标签: batch-file


【解决方案1】:

您可以使用子字符串和内置的 %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%"

【讨论】:

  • 这正是我想要的,这种方法对我来说似乎更自然
  • 非常有帮助!不过,应该注意的是,上述代码的使用假设了一个参数:新文件夹的目标位置。如果您按原样使用它,您将在您启动的任何驱动器的根目录中都有一个带时间戳的文件夹。
【解决方案2】:

简单的 %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%

【讨论】:

    【解决方案3】:

    这对我来说效果很好

    dkdir foldername
    
    cd foldername
    
    dkdir %date% %time% 
    
    cls
    

    【讨论】:

      【解决方案4】:

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

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

      此解决方案对于使用 本地化版本 Windows 的用户尤其重要。

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

      使用date --help 获取格式说明符的完整列表。

      【讨论】:

        【解决方案5】:

        这是我的解决方案(修改了 lopkiju 的)。它使用日期戳创建一个文件夹。如果该名称的文件夹已存在,则向其附加一个整数以使其唯一。将其放入 .bat 文件中并传入父文件夹的路径。
        在 Windows 7 家庭高级版 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
        

        【讨论】:

        • 你能提供一个资源来逐步解释这个吗?我在命令提示符下使用了帮助,有点难以理解
        【解决方案6】:

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

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

        【讨论】:

        • 您没有尝试过您自己的代码吗?显然它不起作用,因为%time% 包含冒号,而在一些小国家/地区,日期包含斜杠,两者在路径名中都无效
        • 确实取决于时间和日期设置
        【解决方案7】:

        我无法使上述许多工作,但成功使用了原始海报命令。

        这是我的版本:

        对于 /f "tokens=1-3 delims=:/" %%i in ("%DATE%") 设置 DATESTAMP=%%i.%%j.%%k
        @echo 目录将使用此名称:
        @echo 备份。%DATESTAMP%
        md 备份。%DATESTAMP%
        @echo 目录已创建,正在复制文件...
        @echo 请确保 PC 没有打开电子邮件或任何文件。
        暂停
        cd 备份。%DATESTAMP%
        md "共享文档"
        xcopy "c:\documents and settings\all users\documents\documents" "共享文档" /E /C /I /H /Q
        文档完成中的@echo。

        等等 :)

        【讨论】:

          【解决方案8】:

          我用这个球棒

          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%
          

          希望对你有帮助。

          【讨论】:

          • 请注意,如果命令扩展被禁用, time /t 将不起作用,但我想这并不会真正打扰你。 (参考pc1news.com/disabling-command-processor-extensions-824.html
          • 我对 bat 脚本了解不多,我只是想要 bat 来创建一个当前日期的文件夹,但感谢您提供的信息。
          • 第二个 for 循环不会在我的计算机上显示秒数,因为 time /t 输出对我来说只是 8:12(没有秒数)。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-02-11
          • 1970-01-01
          • 2016-11-17
          • 2021-11-30
          • 1970-01-01
          • 2018-05-26
          • 1970-01-01
          相关资源
          最近更新 更多