我需要创建一个Windows批处理文件,该文件生成.csv文件,其中包含目录中所有文件的三个字段(减去批处理文件本身!)。
字段:
请注意,批处理文件将从目录运行,并且应该知道为当前目录中的文件生成.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 :(得分:5)
试试这个:
@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
答案 1 :(得分: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
答案 2 :(得分:1)
这是一个命令行一行,不包括列表中新创建的列表文件:
(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
)
答案 3 :(得分:0)
答案 4 :(得分: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
>
将覆盖文件的现有内容,>>
会将新数据附加到现有数据