0

もう一度説明させてください。2つの場所があります。

F:\ Reporting\02.2013フォルダ「02.2013」に以下のファイルがあります

  • Balance Sheet_20130228_045485.xls2013年3月22日14:40
  • Balance Sheet_20130228_024867.xls2013年3月23日午後1時40分
  • Balance Sheet_20130228_023556.xls2013年3月23日15:50

F:\ Statements\02.2013フォルダ「02.2013」に以下のファイルがあります

  • FS_20130228_045485.xls2013年3月22日16:40
  • FS_20130228_024867.xls2013年3月23日午後1時40分
  • FS_20130228_023556.xls2013年3月23日18: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。これは、特定のフォルダーで最新のファイルを見つけるだけです(ループを使用してfor /fdir /a-d日付順にすべてのファイルをループし、最後のファイルのみを記憶します)。次に、move移動してターゲットに名前を変更します。(元のファイルを保持したい場合は、copy代わりに実行してください。)

バッチファイルの上部は、MoveAndRename調べたいソースフォルダごとに1回ずつ、サブルーチンを複数回呼び出すだけです。

バッチファイルを毎月編集することを避けたい場合は、3行目を次のように変更します。

set DateFolder=%1

日付を引数としてバッチファイルに渡します MonthlyProcess.bat 02.2013DateFolderまたは、環境変数を使用して設定することもできますが%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 に答える