2013-08-06 107 views
2

我需要創建生成與目錄中的所有文件三個字段.csv文件Windows批處理文件(減去這個批處理文件!)。的Windows批處理文件來創建的文件列表CSV和日期

領域:

  1. 文件名(!這可以包括逗號)
  2. 創建日期
  3. 修改日期

注意,該批處理文件會從目錄中運行,應知道爲當前目錄中的文件生成.csv文件,但應該而不是列出批處理文件或生成的.csv文件。

PowerShell中,VBScript和等不是在我的情況下是可行的,所以它必須是一個Windows批處理文件。

編輯:

以下是我已經嘗試了兩種主要的方法。

第一次嘗試:我已經試過裸文件名分成「temp1.tmp」,與創建的時間戳爲「temp2.​​tmp」文件列表,並與修改的時戳文件列表變成「TEMP3 .TMP」。

DIR /B /A:-D-H | FIND /V "Print Files.bat" | FIND /V "File List" | FIND /V "temp" > "temp1.tmp" 
DIR /A:-D-H /T:C | FIND /V "Print Files.bat" | FIND /V "File List" | FIND /V "temp" > "temp2.tmp" 
DIR /A:-D-H /T:W | FIND /V "Print Files.bat" | FIND /V "File List" | FIND /V "temp" > "temp3.tmp" 

MORE +5 "temp2.tmp" > "temp4.tmp" 
COPY /Y "temp4.tmp" "temp2.tmp" 
MORE +5 "temp3.tmp" > "temp4.tmp" 
COPY /Y "temp4.tmp" "temp3.tmp" 
DEL /F/Q "temp4.tmp" 

但是這種方法的問題是,我無法弄清楚如何從多個文件一次讀線。下面是我發現的最接近,但也僅僅是從一個文件:

FOR /F "delims=" %%i IN (temp1.tmp) DO (
    ECHO."%%i" >> "File List.csv" 
) 

第二次嘗試:我嘗試使用臨時文件避免,但無濟於事。

FOR %%i IN (*.*) DO @ECHO "%%~ni%%~xi",%%~ti >> "File List.csv" 

第二種方法的問題是它不排除批處理文件名,它不提供文件創建時間戳。

有沒有一種解決方案,使這兩種工作對我來說,或者說,我還沒有嘗試過的方法?

+0

SO不是一種類型的網站,「我免費寫代碼」。你試過什麼了? –

+0

@AnsgarWiechers和Ken小白:你都正確。當我寫這個問題並忘記描述我解決問題的嘗試時,我太急了。 – Elessar

+0

請提供您的本地時間格式,歐洲或AM/PM? – Endoro

回答

4

試試這個:

@ECHO OFF &SETLOCAL 
(FOR /f "delims=" %%a IN ('dir /b /a-d') DO (
    FOR /f "tokens=1-3*" %%x IN ('dir /a-d /tc "%%~a"^|findstr "^[0-9]"') DO (
     ECHO "%%a",%%~ta,%%x %%y %%z 
    ) 
))>DIR.csv 
TYPE DIR.csv 
+0

這也做了工作,是有點更容易理解。 – Elessar

2

像這樣的東西可能會奏效:

@echo off 

setlocal EnableDelayedExpansion 

(
    echo "Name","Modification Time","Creation Time" 
    for %%f in (*) do (
    set "name=%%~nxf" 
    if not "!name!"=="%~nx0" (
     set "mtime=%%~tf" 
     for /f "tokens=1-3" %%d in (
     'dir /t:c "!name!" ^| find /i "!name!"' 
    ) do set "ctime=%%~d %%~e %%~f" 
     echo "!name!","!mtime!","!ctime!" 
    ) 
) 
) > output.csv 
+0

謝謝!雖然批處理文件和CSV文件不排除的名字,我敢肯定,我可以計算的那部分。我會贊成答案,但我沒有足夠的聲譽。 – Elessar

+0

批處理文件*的名稱*被排除。雖然CSV的名稱不是。 –

+0

你是對的。我正在查看列表中的其他文件。 – Elessar

0

這裏是一個命令行一個襯墊不包括新創建的列表中的列表文件:

(for /f "tokens=1-4*" %A in ('dir /a-d /tc^|findstr "^[0-9]"') do @if "%E" neq "FileList.csv" echo "%E",%A %B %C,%~tE)>"FileList.csv" 

下面是一個批處理腳本不包括本身或新創建的列表文件:

@echo off 
>"FileList.csv" (
    for /f "tokens=1-4*" %%A in (
    'dir /a-d /tc^|findstr "^[0-9]"' 
) do if "%~f0" neq "%%~fE" if "%%E" neq "FileList.csv" echo "%%E",%%A %%B %%C,%%~tE 
) 
0

我有一個要求,讀線在兩個文件輸出的數量和CSV文件。

@ECHO OFF 
cd "D:\CSVOutputPath\" 
echo Process started, please wait... 
echo FILENAME,FILECOUNT> SUMMARY.csv 
for /f %%C in ('Find /V /C "" ^< "D:\Trial\Salary.txt"') do set Count=%%C 
echo Salary,%Count%>> SUMMARY.csv 
for /f %%C in ('Find /V /C "" ^< "D:\Trial\Tax.txt"') do set Count=%%C 
echo Tax,%Count%>> SUMMARY.csv 

>將覆蓋現有文件的內容和>>將新數據添加到現有的數據

相關問題