0

好的,让我再次解释一下,我有两个位置:

F:\Reporting\02.2013 在文件夹“02.2013”​​中我有以下文件

  • Balance Sheet_20130228_045485.xls2013 年 3 月 22 日下午 2:40
  • Balance Sheet_20130228_024867.xls2013 年 3 月 23 日下午 1:40
  • Balance Sheet_20130228_023556.xls2013 年 3 月 23 日下午 3:50

F:\Statements\02.2013 在文件夹“02.2013”​​中我有以下文件

  • FS_20130228_045485.xls2013 年 3 月 22 日下午 4:40
  • FS_20130228_024867.xls2013 年 3 月 23 日下午 1:40
  • FS_20130228_023556.xls2013 年 3 月 23 日下午 6:45

首先,我想将两个文件夹中的最新修改文件移动到目标文件夹:

  • 目标文件夹是F:\accounting\02.2013

然后我想将这些文件重命名为

  • Balance Sheet_20130228_023556.doc作为BalanceMTD.xls
  • FS_20130228_045485.doc作为FS.xls

注意:我每个月都要做这个活动,

  • 所以文件夹位置会像F:\Reporting\03.2013
  • 并且文件名也将更改为FS_20130331_045465.doc2013 年 4 月 27 日下午 4:30

你能建议我任何可以帮助我做到这一点的批处理文件吗?如果需要,我会在每个月更改日期,然后再执行它。

4

2 回答 2

2

这将移动并重命名每个源目录中的最新文件:

@echo off
setlocal
set DateFolder=02.2013
set TargetFolder=F:\Accounting\%DateFolder%

:: Move the newest file from Reporting and rename it to BalanceMTD.xls
call :MoveAndRename "F:\Accounting\%DateFolder%" "%TargetFolder%\BalanceMTD.xls"

:: Move the newest file from Statements and rename it to FS.xls
call :MoveAndRename "F:\Statements\%DateFolder%" "%TargetFolder%\FS.xls"

:: Done
goto :eof


:MoveAndRename
set SourceFolder=%~1
set TargetFile=%~2

:: Find the newest file in the source folder
for /f "tokens=*" %%F in ('dir /b /od /a-d "%SourceFolder%"') do set "NewestFile=%%F"

:: Move and rename it to the target
move "%SourceFolder%\%NewestFile%" "%TargetFile%"

:: Done with this subroutine
goto :eof

我将大部分工作代码放在名为 的“子程序”MoveAndRename中,它只是在特定文件夹中查找最新文件(使用 afor /f上的循环dir /a-d按日期顺序循环所有文件,只记住最后一个),然后 amove移动并将其重命名为目标。(如果您想保留原始文件,请copy改用。)

批处理文件的顶部然后只是MoveAndRename多次调用子例程,一次用于您要查看的每个源文件夹。

如果您想避免每月编辑批处理文件,请将第三行更改为:

set DateFolder=%1

并将日期作为参数传递给批处理文件: MonthlyProcess.bat 02.2013. 或者您可以DateFolder使用%date%环境变量进行设置,但由于它是根据您的语言环境设置格式化的,并且在其他地方有很好的记录,我将把它留给您作为练习。

于 2013-03-27T14:25:12.270 回答
0
@echo off
setlocal EnableDelayedExpansion
cd F:\MY DOCUMENTS\zyx
rem Process all file names
for /F "delims=" %%a in ('dir /B *.xls') do (
   rem Get base name before first underscore (ie: "Balance Sheet" or "FS")
   for /F "delims=_" %%b in ("%%a") do (
      rem Check if name have two words (ie: "Balance"/"Sheet" or "IC"/"Activities")
      for /F "tokens=1,2" %%c in ("%%b") do (
         rem If base name have just one word...
         if "%%d" equ "" (
            rem New name is that word (ie: "FS")
            set newName=%%c
         ) else (
            rem We don't know what goes here!
         )
      )
   )
   ren "%%a" "!newName!.xls"
)

如果您向我们提供有关如何执行此操作的详细信息,我们可以完成以前的程序...

于 2013-03-27T14:49:48.963 回答