我需要创build一个Windowsbatch file,为一个目录中的所有文件(减去batch file本身!)生成一个带有三个字段的.csv文件。
领域:
请注意,该batch file将从目录运行,并应知道为当前目录中的文件生成.csv文件,但不应列出batch file或生成的.csv文件。
Powershell,VBScript等在我的情况下是不可行的,所以它必须是一个Windowsbatch file。
编辑:
以下是我尝试的两种主要方法。
第一次尝试:我尝试将裸文件名分隔为“temp1.tmp”,将创build时间戳的文件列表分隔为“temp2.tmp”,将修改时间戳的文件列表分隔为“temp3.tmp”。
DIR /B /A:-DH | FIND /V "Print Files.bat" | FIND /V "File List" | FIND /V "temp" > "temp1.tmp" DIR /A:-DH /T:C | FIND /V "Print Files.bat" | FIND /V "File List" | FIND /V "temp" > "temp2.tmp" DIR /A:-DH /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"
第二种方法的问题是它不排除batch file的名称,它不提供文件创build时间戳。
有没有一个解决scheme,使这两个为我工作,还是我还没有尝试过的方法?
尝试这个:
@ECHO OFF &SETLOCAL (FOR /f "delims=" %%a IN ('dir /b /a-d') DO ( FOR /f "tokens=1-3*" %%x IN ('dir /ad /tc "%%~a"^|findstr "^[0-9]"') DO ( ECHO "%%a",%%~ta,%%x %%y %%z ) ))>DIR.csv TYPE DIR.csv
像这样的东西可能会工作:
@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
用于将目录列表写入CSV的单行PowerShell命令
这是一个不包括列表中新创建的列表文件的命令行:
(for /f "tokens=1-4*" %A in ('dir /ad /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 /ad /tc^|findstr "^[0-9]"' ) do if "%~f0" neq "%%~fE" if "%%E" neq "FileList.csv" echo "%%E",%%A %%B %%C,%%~tE )
我需要读取两个文件中的行数并输出到一个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
>
将覆盖文件的现有内容,“ >>
将把新数据附加到现有数据