Batch file 批处理文件,用于附加带有时间戳的文件夹名称并移动到目标目录

Batch file 批处理文件,用于附加带有时间戳的文件夹名称并移动到目标目录,batch-file,timestamp,append,move,Batch File,Timestamp,Append,Move,在我看来,这似乎是一个常见的问题,但我在谷歌上花了几个小时,还没有找到一个合适的解决方案 我在源目录中有文件夹: C:\备份 我已设置目标目录: C:\archive 我只需要一个批处理文件,该文件将: 1) 向源目录中的所有文件夹(而不是其中的文件)添加时间戳,然后 2) 然后将它们移动到目标目录 如果.bat文件也可以写入日志文件以防出现故障,那就太好了 这是我找到的代码,但它只复制文件夹中的文件,而不是文件夹本身。我需要文件和文件夹,并将时间戳添加到文件夹中 @echo off for /

在我看来,这似乎是一个常见的问题,但我在谷歌上花了几个小时,还没有找到一个合适的解决方案

我在源目录中有文件夹: C:\备份

我已设置目标目录: C:\archive

我只需要一个批处理文件,该文件将: 1) 向源目录中的所有文件夹(而不是其中的文件)添加时间戳,然后 2) 然后将它们移动到目标目录

如果.bat文件也可以写入日志文件以防出现故障,那就太好了

这是我找到的代码,但它只复制文件夹中的文件,而不是文件夹本身。我需要文件和文件夹,并将时间戳添加到文件夹中

@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"

SET "DATE_FOLDER=%YYYY%%MM%%DD%"

cd /d "C:\LC_Data_Review\backups\"
SET "ACHIEVE_DIR=C:\archived_data_packages\" 
md "%ACHIEVE_DIR%" 2>nul

for /r %%a in (*) do (
for /r %%b in (*) do move "%%~b" "%ACHIEVE_DIR%\%%~nb - %DATE_FOLDER%%%~xb"
rd /s /q "%%a"
)
以上代码仅复制文件

提前感谢所有能够提供代码的人


Kevin

您可以使用此脚本来帮助。首先,它获取日期和时间,然后将其存储为变量并重命名。路径为路径中的路径,起点和终点为起点和终点位置的路径

REM Date and time code taken from http://www.winnetmag.com/windowsscripting/article/articleid/9177/windowsscripting_9177.html
@echo off
for /f "tokens=1-7 delims=:/-, " %%i in ('echo exit^|cmd /q /k"prompt $d $t"') do (
   for /f "tokens=2-4 delims=/-,() skip=1" %%a in ('echo.^|date') do (
      set dow=%%i
      set %%a=%%j
      set %%b=%%k
      set %%c=%%l
      set hh=%%m
      set min=%%n
      set ss=%%o
   )
)

echo %dow% %yy%-%mm%-%dd% @ %hh%:%min%:%ss%
pause
      set %%c=%%l
      set hh=%%m
      set min=%%n
      set ss=%%o
   )
)

set filename=%dow% %yy%-%mm%-%dd% @ %hh%:%min%:%ss%
for /D %%f in (C:path) do rename "%%f" "%%~nxf_%filename%"
robocopy c:\start c:\finish /e

这里有一个解决方案:

假设您创建了一个名为archive.bat的批处理文件,其中包含以下内容:

for /d %%d in (%1\*) do (xcopy "%%d\*" "%2\%%~nxd-%DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%" /E /V /I)&&(rd "%%d" /s /q)
你称之为:

archive.bat C:\backups C:\archive
给定文件夹:

C:\backups\one
C:\backups\two
您将获得:

C:\archive\one-YYYY-MM-DD
C:\archive\two-YYYY-MM-DD
其中YYYY-MM-DD是当前日期。根据需要更改日期格式字符串

所采取的步骤是:

  • 使用for/d迭代第一个参数(%1)中指定的路径的子目录
  • 使用xcopy将每个目录的所有内容移动到附加时间戳的第二个参数(%2)中指定的路径的子目录中。xcopy/I指定创建新的时间戳目录
  • 在没有提示的情况下递归删除源目录
  • 以下是我的测试结果:

    C:\>dir C:\backups /b /s
    C:\backups\One
    C:\backups\Two
    C:\backups\One\alpha
    C:\backups\One\beta
    C:\backups\One\alpha\New Bitmap Image.bmp
    C:\backups\One\alpha\New Rich Text Document.rtf
    C:\backups\One\alpha\New Text Document.txt
    C:\backups\One\beta\New Bitmap Image.bmp
    C:\backups\One\beta\New Rich Text Document.rtf
    C:\backups\One\beta\New Text Document.txt
    C:\backups\Two\alpha
    C:\backups\Two\beta
    C:\backups\Two\alpha\New Bitmap Image.bmp
    C:\backups\Two\alpha\New Rich Text Document.rtf
    C:\backups\Two\alpha\New Text Document.txt
    C:\backups\Two\beta\New Bitmap Image.bmp
    C:\backups\Two\beta\New Rich Text Document.rtf
    C:\backups\Two\beta\New Text Document.txt
    
    C:\>test C:\backups C:\archive\
    C:\backups\One\alpha\New Bitmap Image.bmp
    C:\backups\One\alpha\New Rich Text Document.rtf
    C:\backups\One\alpha\New Text Document.txt
    C:\backups\One\beta\New Bitmap Image.bmp
    C:\backups\One\beta\New Rich Text Document.rtf
    C:\backups\One\beta\New Text Document.txt
    6 File(s) copied
    
    C:\backups\Two\alpha\New Bitmap Image.bmp
    C:\backups\Two\alpha\New Rich Text Document.rtf
    C:\backups\Two\alpha\New Text Document.txt
    C:\backups\Two\beta\New Bitmap Image.bmp
    C:\backups\Two\beta\New Rich Text Document.rtf
    C:\backups\Two\beta\New Text Document.txt
    6 File(s) copied
    
    C:\>dir C:\archive /b /s
    C:\archive\One-2017-08-09
    C:\archive\Two-2017-08-09
    C:\archive\One-2017-08-09\alpha
    C:\archive\One-2017-08-09\beta
    C:\archive\One-2017-08-09\alpha\New Bitmap Image.bmp
    C:\archive\One-2017-08-09\alpha\New Rich Text Document.rtf
    C:\archive\One-2017-08-09\alpha\New Text Document.txt
    C:\archive\One-2017-08-09\beta\New Bitmap Image.bmp
    C:\archive\One-2017-08-09\beta\New Rich Text Document.rtf
    C:\archive\One-2017-08-09\beta\New Text Document.txt
    C:\archive\Two-2017-08-09\alpha
    C:\archive\Two-2017-08-09\beta
    C:\archive\Two-2017-08-09\alpha\New Bitmap Image.bmp
    C:\archive\Two-2017-08-09\alpha\New Rich Text Document.rtf
    C:\archive\Two-2017-08-09\alpha\New Text Document.txt
    C:\archive\Two-2017-08-09\beta\New Bitmap Image.bmp
    C:\archive\Two-2017-08-09\beta\New Rich Text Document.rtf
    C:\archive\Two-2017-08-09\beta\New Text Document.txt
    

    谢谢金桔提供的有用信息。我会在早上运行它,让你知道它是如何工作的!再次感谢你!我不确定用什么替换“C:path”,所以我使用了源目录的路径。.bat文件只复制子文件夹,但不复制其中的任何文件,并且没有附加任何带有时间戳的内容。我需要复制文件夹及其文件。而且,原始文件夹仍然保留在源目录中,而没有移动到目标。@Systech,哎呀,真是抱歉。看来你已经找到答案了,干得好!不用担心,再次感谢你的帮助。我很感激!谢谢你提供的有用信息。我明天早上回来报到。非常感谢!这很有效!非常感谢。如何让脚本复制子目录中的文件?此脚本已经编写为使用xcopy/E参数递归复制文件,该参数甚至复制空目录(如果需要,请随意更改)。我已经添加了显示递归文件副本的测试输出。如果你喜欢这一行解决方案,别忘了投票。我一定是做错了什么。它现在工作得很好!非常感谢!