如何自动创建名称为当天的文件夹并将现有文件和子文件夹移动到该文件夹​​中?

时间:2014-11-12 18:31:19

标签: windows batch-file cmd

我需要一个简单的工具来完成我的重复工作。所以我在文本文件中写了一些命令并将文件保存为* .bat文件。

  1. 使用当月作为文件夹名称创建一个新文件夹。

    示例:今天是13-11-14(格式日期:dd-mm-yy)

    MD=%date:~0.2%

    创建文件夹: 13

  2. 将现有文件或文件夹移至文件夹 13

    示例:

    在批处理文件执行之前,当前文件夹包含:

    • 文件夹
    • 文件夹b
    • 文件c
    • 文件d

    批处理文件执行后,当前文件夹应包含:

    • 17
      • 文件夹
      • 文件夹b
      • 文件c
      • 文件d
  3. 我画了image以显示我需要的东西。

    我不知道如何编写任务的第二部分。

    将当前文件夹中的所有文件和子文件夹移动到名称为当月的新文件夹时需要哪些命令?

2 个答案:

答案 0 :(得分:0)

好的,这是此任务的小批处理文件,带有注释和额外检查。

@echo off
rem Get name of batch file in case of being in current directory, too. It is
rem verified if the batch file executed is really in the current directory.
set "BatchFileName="
if "%~dp0"=="%CD%\" set "BatchFileName=%~nx0"

rem Get current day of month. Works only with date formats beginning with day.
set "Day=%DATE:~0,2%"

rem Create the directory if it does not already exist.
if not exist "%Day%" mkdir "%Day%"

rem Move all subdirectories except the directory of current day.
for /D %%D in (*) do if not "%%D"=="%Day%" move /Y "%%D" "%Day%"

rem Move all files except running batch file.
for %%F in (*) do if not "%%F"=="%BatchFileName%" move /Y "%%F" "%Day%"

rem Delete the two environment variables used for this task.
set "BatchFileName="
set "Day="

输入以下内容后,可以在命令提示符窗口中读取所用命令的帮助:

  • help ifif /?
  • help forfor /?
  • help setset /?
  • help movemove /?
  • help mkdirhelp mdmkdir /?md /?

答案 1 :(得分:0)

它很棒,感谢Mofi,但并不完美:D代表我。

我尝试但不能写更多的步骤。你能编辑一下吗?

<强> 1。删除所有空文件夹

<强> 2。移动我需要移动的完全文件夹(a,b,c):

我有7个要移动的文件夹。

在批处理文件执行之前,当前文件夹包含:

  • 文件夹
  • 文件夹b
  • 文件夹c
  • 文件夹MONTH 11
  • 文件夹d
  • 档案e
  • ....

批处理文件执行后,当前文件夹应包含:

如果文件夹L1已存在,请创建新文件夹名称L2,L3,L4,...

  • 文件夹17
    • 文件夹L1
      • 文件夹
      • 文件夹b
      • 文件夹c
  • 文件夹MONTH 11
  • 文件夹d
  • 档案e
  • ....

第3。移动文件夹&#34; 17&#34;在文件夹中有名称&#34; MONTH 11&#34;:

在批处理文件执行之前,当前文件夹包含:

  • 文件夹17
    • 文件夹L1
      • 文件夹
      • 文件夹b
      • 文件夹c
  • 文件夹MONTH 11
  • 文件夹d
  • 档案e
  • ....

批处理文件执行后,当前文件夹应包含:

  • 文件夹MONTH 11
    • 文件夹17
      • 文件夹L1
        • 文件夹
        • 文件夹b
        • 文件夹c
  • 文件夹d
  • 档案e
  • ....

由Mofi编辑

下一次,永远不要在回答问题时提出新的问题。创建一个新问题,引用(链接)前者,类似的问题。这为您和其他用户提供了获得更多声誉的可能性。

我在这里发布了您的新要求的批处理文件代码,尽管您现在无法接受我的答案。

@echo off
rem Delete empty folders. Command rmdir does not delete a folder without
rem parameter /S if it contains a file or a subfolder. The error message
rem output if folder is not empty is redirected to NUL device to suppress it.
rmdir "Folder a" 2>nul
rmdir "Folder b" 2>nul
rmdir "Folder c" 2>nul

rem Get directory for current day in current month.
set "DayFolder=MONTH %DATE:~3,2%\%DATE:~0,2%"

rem Create the day folder and if necessary automatically also the month folder.
if not exist "%DayFolder%" mkdir "%DayFolder%"

rem Check existence of L* subfolders in day folder.
set "Number=1"
:Loop
if exist "%DayFolder%\L%Number%" set /A "Number+=1" & goto Loop

rem Create the next L* subfolder in day folder.
mkdir "%DayFolder%\L%Number%"

rem Move the remaining folders into new L* subfolder in day folder.
if exist "Folder a" move /Y "Folder a" "%DayFolder%\L%Number%"
if exist "Folder b" move /Y "Folder b" "%DayFolder%\L%Number%"
if exist "Folder c" move /Y "Folder c" "%DayFolder%\L%Number%"

rem Delete the last L* day folder if it does not contain anything.
rmdir "%DayFolder%\L%Number%" 2>nul

rem Delete the current day folder in current month if still empty.
rmdir "%DayFolder%" 2>nul

rem Delete the current month folder if still empty.
rmdir "MONTH %DATE:~3,2%" 2>nul