Batch file 批处理文件以根据月份移动文件(&A);年月日修改为带有YYYY_MM的文件夹

Batch file 批处理文件以根据月份移动文件(&A);年月日修改为带有YYYY_MM的文件夹,batch-file,file-io,Batch File,File Io,任何人都可以帮助我创建一个批处理文件,以便根据年月日修改的xml文件将*.xml文件从X文件夹移动到YYYY\U MM文件夹 我不确定在循环中放什么 @echo off echo Date is %Date% dir /od/b "C:\Users\*.xml" > test.log for /F %%f in (test.log) DO ( ) 首先,我想将set var=%%~tf放入循环中,以便以后我可以使用var上的子字符串来获取月份和年份,并基于此将xml文件移动到YYYY

任何人都可以帮助我创建一个批处理文件,以便根据年月日修改的xml文件将*.xml文件从X文件夹移动到YYYY\U MM文件夹

我不确定在循环中放什么

@echo off

echo Date is %Date%
dir /od/b "C:\Users\*.xml" > test.log
for /F %%f in (test.log) DO
(

)

首先,我想将
set var=%%~tf
放入循环中,以便以后我可以使用var上的子字符串来获取月份和年份,并基于此将xml文件移动到YYYY_MM文件夹中,但它似乎不起作用。

试试这个[否ROBOCOPY必需]:

 @echo off
    set "src=C:\test"
    set "dest=C:\test"
    for %%F in ("%src%\*") do (
      for /f "tokens=1,2,3 delims=/ " %%A in ("%%~tF") do (
        if not exist "%dest%\%%C_%%A" mkdir "%dest%\%%C_%%A"
        move "%%~fF" "%dest%\%%C_%%A"
      )
    )

对于任何想要移动子目录的人来说,除了r3ap3r的答案之外,这里有一个解决方案。基本上,只需添加另一个带有/d标志的for循环,即可通过子目录进行循环:

@echo off
set "src=..\"
set "dest=..\archive"
for %%F in ("%src%\*") do (
  for /f "tokens=1,2,3 delims=/ " %%A in ("%%~tF") do (
    if not exist "%dest%\%%C_%%A" mkdir "%dest%\%%C_%%A"
    move "%%~fF" "%dest%\%%C_%%A"
  )
)

for /d %%D in ("%src%\*") do (
  for /f "tokens=1,2,3 delims=/ " %%A in ("%%~tD") do (
    if not exist "%dest%\%%C_%%A" mkdir "%dest%\%%C_%%A"
    move "%%~fD" "%dest%\%%C_%%A"
  )
)

谢谢你,我总是忘记这类任务的目录创建部分。robocopy的使用只是为了避免本地化windows版本中不同日期格式的常见问题。但是,正如您所展示的,它是
不需要的
只是一个方便的选项。
%%~tF
也是本地化的,并且作为一个通用解决方案不可靠,因为格式在任何给定的计算机上都可以更改。使用机器人技术可能是更好的方法。