2015-04-22 88 views
0

我需要一些幫助來創建基於一堆子文件夾的輸出文件(或「報告」)。我想每晚給自己發電子郵件(我可以處理文件的電子郵件,只是不知道如何創建實際的文件)。在一組子目錄中修改最新文件的日期

我的數據結構:

  • 主要含有工作目錄:
    • 我bat文件從服務器3中的數據複製到下面
    • TFX日誌文件夾
        的TFX日誌文件夾
      • 客戶端文件夾
        • 長達15天的.log文件小號

我想要做什麼:

  1. 複製從3個服務器TFX Log文件夾中的數據,保持結構(TFX登錄\ Client \ TFX _ *。log)(COMPLETED
  2. 創建一首歌le .txt或.csv文件與每個客戶端文件夾中最新的TFX _ *。日誌文件列表(只是最新的 - 並非全部15個文件)。類似這樣的:

    目錄名稱|文件名|修改日期

  3. 電子郵件文件,以我自己(竣工

我只是需要與2號幫助。

這是我到目前爲止有:

:: Copying data 

XCOPY "%source1%" "%destination%\TFX Logs\" /s /y 
XCOPY "%source2%" "%destination%\TFX Logs\" /s /y 
XCOPY "%source3%" "%destination%\TFX Logs\" /s /y 

:: Deleting old output file before creating new one 

DEL "%destination%\*.txt" 

:: Creating new output file 

powershell "& '%destination%\ListFiles.ps1'" 

REN "%destination%\ImportReport.txt" ImportReport_%tday%.txt 

我的PowerShell腳本看起來像這樣:

Get-ChildItem "..Daily Report\TFX Logs\" -recurse -file | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-1)} | Out-File "..Daily Report\ImportReport.txt" 

我得到現在的問題是這樣的:

(我只想從每個文件夾使用最新的文件克#2如果可能的話)

Directory: ..\TFX Logs\Client1 


Mode    LastWriteTime  Length Name        
----    -------------  ------ ----        
-a---   4/22/2015 3:06 AM  329 TFX_db21_1522040304.log   


Directory: ..\TFX Logs\Client2 


Mode    LastWriteTime  Length Name        
----    -------------  ------ ----        
-a---   4/22/2015 12:22 AM  331 TFX_db4_1522040017.log    


Directory: ..\TFX Logs\Client3 


Mode    LastWriteTime  Length Name        
----    -------------  ------ ----        
-a---   4/21/2015 8:03 PM  329 TFX_db4_1521042002.log 

克利夫筆記上面指定的結構:

我想重新從PowerShell的輸出是:

目錄名稱(目錄)|文件名(名稱)| Last Modified Date(LastWriteTime)

沒有所有其他的東西和所有的空白。只是一個很好的逐行輸出。

此外,如果可能的話,如果有一個空白文件夾(或有一個文件夾的文件超過15天),仍然顯示在報告文件中,但沒有記錄。這樣我就知道了,嘿,這個客戶還沒有跑了一段時間,需要進行檢查。

UPDATE 15年4月29日

脫線以下的建議,表明希望,但是還沒有爲我工作。它什麼都不做。任何人有任何其他想法來改進我已有的東西?

回答

0
@ECHO OFF 
SETLOCAL 
SET "source1=U:\sourcedir" 
SET "source2=U:\sourcedir2" 
SET "source3=U:\source dir3" 
SET "destdir=U:\destdir" 

DEL "%destdir%\*.txt" 
FOR %%d IN ("%source1%" "%source2%" "%source3%") DO CALL :process %%d 

GOTO :EOF 

:process 
ECHO(XCOPY %1 "%destdir%\TFX Logs\" /s /y 
PUSHD %1 
FOR /f %%a IN ('dir /b /o-d TFX_*.log') DO >>"%destdir%\ImportReport_%tday%.txt" (
ECHO %~1,%%~ta,%%~za,%%a 
popd 
GOTO :eof 
) 
popd 
GOTO :eof 

這應該可以解決您的問題。

爲了測試,我用我的u:驅動器和destdir作爲目標diectoryname。

簡單地刪除目標文件.txt,然後爲目錄名的列表,調用一個過程,

  • 副本日誌文件中的要求XCOPY命令僅僅是ECHO版進行測試。 驗證命令是否正確後,將ECHO(XCOPY更改爲XCOPY以實際複製文件。附加>nul抑制報告消息(例如。1 file copied

  • 切換到目標目錄

  • 執行目錄列表我匹配掩模,在反向日期順序排序的文件的基本格式
  • 輸出目錄名稱,文件時間。文件大小和名稱到報告文件(我假設你已設置tday
  • 彈回原始目錄並終止循環,以便只報告1個文件名(最後一個按時間順序排列)。
+0

嗨@Magoo,謝謝你的回覆。但是,您的腳本似乎沒有做任何事情。我替換了必要的變量(目的地等)。窗戶快速閃爍。我試着將TFX Log文件夾更改爲TFX Log2,看看它是否會創建一個新的目錄,但它沒有。這是與ECHO刪除。 – Ilya

+0

有人嗎? @Magoo? – Ilya

相關問題