1

我正在尝试编写一个批处理文件来执行以下任务:

  1. 我在一个文件夹 (ABC) 中有 20 个子文件夹(牛奶、奶酪、蛋白质...)。每个子文件夹有大约 15 个 .csv 中的每月文件,命名为 2013-10-01、2013-09-02、2013-07-31.....

  2. 这些月度文件是按月添加的,它们的名称没有规律,例如,它可能是 10 月的第一天,但​​ 11 月的第四天。所以每个月我都会为每个子文件夹添加一个新文件,即文件数量在增加;

  3. 每个月,对于每个子文件夹/类别,我都想将最近的 9 个月度文件复制到另一个位置,例如文件夹 CDE

  4. 将它们复制到文件夹 CDE后,我将它们全部放在一个文件中,该文件具有使用当前时间定义的唯一名称(%%d-%%e-%%f)。这样,我每个月都可以拥有每个类别的月度文件。

我能够为第 4 步编写代码,并且想知道你们中的任何人是否可以在第 3 步提供帮助。我现在每次都必须手动复制和粘贴所有 20 个子文件夹中的 9 个文件。这是非常低效的,我知道一些批处理命令绝对可以让这个过程更快更容易。

非常感谢!

4

2 回答 2

0
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir abc /b /o-d') do (set /a a=0&for /f "delims=" %%j in ('dir "abc\%%~i" /b /o-d') do (set /a a+=1&if !a! LEQ 9 (copy /Y "abc\%%~i\%%~j" cde)))


如果这不是您想要的,请将其放在 abc 和 cde 所在的同一文件夹中,请您详细说明。

于 2013-10-07T20:32:46.710 回答
0

编辑修复了“复制所有文件”问题。

这应该执行以下操作:(更改 c:\cde 和 c:\abc)

1) 从文件夹中复制 9 个最近的文件
2) 将它们全部合并到一个名为 foldername-HHMMSS 的文件(来自时间变量)
3) 在 c:\ABC 文件夹中创建 foldername-HHMMSS 文件
4) 删除复制的 9 个文件
5) 对每个文件夹重复

@echo off
set "source=D:\ABC"
set "target=C:\files\CDE"
setlocal enabledelayedexpansion
md "%target%" 2>nul
for /d /r "%source%" %%a in (*) do (
  pushd "%%a"
     set num=0
         for /f "delims=" %%b in ('dir /o-d /b /a-d') do (
           set /a num+=1
           if !num! LSS 10 copy "%%b" "%target%" >nul
         )
     set t=!time!
     set t=!t:~0,2!!t:~3,2!!t:~6,2!
     copy "%target%\*.*" "%source%\%%~nxa-!t!" >nul
     echo "%source%\%%~nxa-!t!" created from "%%a"
     if defined target del "%target%\*.*?"
  popd
)
pause
于 2013-10-07T23:25:06.400 回答