批处理:文件夹内都是图片,想要提取文件夹内所有的文件名+修改时间(要含分秒)生成exce的XLSX格式?

修改时间(要含分秒)生成exce的XLSX格式:
A列是修改时分秒,B列是文件的完整路径,C列是文件名

第一步:将压缩包解压到一个空文件夹里

第二步:进入这个文件夹,点当前窗口工具栏的【搜索】(你知道什么叫工具栏吧?),于是在左侧出现搜索栏

第三步:在【要搜索的文件或文件夹名为】框里填*.* 就会搜索出当前文件夹下的所有文件和子文件夹

第四步:然后在右侧的空白区域点右键,【排列图标】-【名称】,即可把所有的文件和文件夹分开

第五步:再用Shift键选中所有文件,复制或者剪切就随你了,剩下的不用说了吧~~~、

祝你好运哦!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-05-08

不清楚你的实际文件/情况,仅以问题中的样例/说明为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的多个文件夹放一起双击运行

<# :

cls&echo off&mode con lines=5000

rem 从当前目录下的多个文件夹里的子文件夹下查找并提取出一个指定名称文件夹里的图片文件

set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4

title %#% +%$%%$%/%@% %z%

cd /d "%~dp0"

powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312')))) -Args '%~f0'"

echo;%#% +%$%%$%/%@% %z%

pause

exit

#>

$self=get-item -liter $args[0];

$path=$self.Directory.FullName;

$folders1=@(dir -liter $path|?{(-not $_.Name.EndsWith("_A+")) -and ($_ -is [System.IO.DirectoryInfo])});

for($i=0;$i -lt $folders1.length;$i++){

$folders2=@(dir -liter $folders1[$i].FullName|?{$_ -is [System.IO.DirectoryInfo]});

for($j=0;$j -lt $folders2.length;$j++){

$folders3=@(dir -liter $folders2[$j].FullName -recurse|?{($_.Name -eq 'A+') -and ($_ -is [System.IO.DirectoryInfo])});

if($folders3.length -ge 1){

$files=@(dir -liter $folders3[0].FullName|?{(@('.jpg','.jpeg','.bmp','.png') -contains $_.Extension) -and ($_ -is [System.IO.FileInfo])});

for($k=0;$k -lt $files.length;$k++){

$newfolder=$folders1[$i].FullName+'_A+\'+$folders2[$j].Name+$files[$k].Directory.FullName.substring($folders3[0].FullName.length);

if(-not (test-path -liter $newfolder)){[void][IO.Directory]::CreateDirectory($newfolder)};

write-host ($files[$k].FullName.substring($path.length)+' --> '+$newfolder.substring($path.length));

}}}}

第2个回答  2022-05-02

脚本保存为ANSI编码

@echo off & title 获取文件名,路径,修改时间,并记录到表格中 By 依梦琴瑶

::设置要处理的文件夹,如需处理当前目录,请设为%~dp0
set SrcDir=D:\Pictures

::设置要处理的文件格式,处理全部格式请直接设为*
set Ext=*.jpg,*.gif,*.png,*.bmp

::设置是否包含子目录,是=1,否=其它任何非1的字符
set Sub=1

::保存的表格文件名
set Excel=文件列表表格.xlsx

if "%Sub%"=="1" set "S=/s"
pushd "%SrcDir%"
echo 正在获取中,请耐心等待。。。
(echo "修改时间","完整路径","文件名"
for /f "delims=" %%a in ('dir /a-d%S%/b %Ext% 2^>nul') do (
    call :GetFileInfo "%%~fa"
))>"%tmp%\MyFilesListTemp.csv"
popd

call :WriteXLSXFile
cls & echo 文件列表表格生成完毕,请在脚本同目录下查看“%Excel%”。
pause
exit

:WriteXLSXFile
(echo Set oExcel = CreateObject("Excel.Application"^)
echo oExcel.Workbooks.Open "%tmp%\MyFilesListTemp.csv"
echo oExcel.ActiveSheet.Columns("A:O"^).Select
echo oExcel.Selection.EntireColumn.AutoFit
echo oExcel.ActiveWorkbook.SaveAs "%~dp0%Excel%",51
echo oExcel.Quit)>"%tmp%\Csv2Xlsx.vbs"
del /f /q "%~dp0%Excel%" 2>nul
"%tmp%\Csv2Xlsx.vbs"
goto :eof

:GetFileInfo
set "FileFullPath=%~1"
set "FilePath=%~dp1"
set "FilePath=%FilePath:~,-1%"
set "FileFullName=%~nx1"
set "FileName=%~n1"
set "LastModified="
for /f "delims=" %%i in ('wmic datafile where "name='%FileFullPath:\=\\%'" get LastModified /value') do set "%%~i" >nul 2>nul
set "LastTime=%LastModified:~,14%"

rem 如果输出的路径中不想包含文件名+后缀,那么请把下方的FileFullPath改成FilePath
rem 如果输出的文件名中想包含后缀,那么请把下方的FileName改成FileFullName
echo "%LastTime:~,4%/%LastTime:~4,2%/%LastTime:~6,2% %LastTime:~8,2%:%LastTime:~10,2%:%LastTime:~12,2%","%FileFullPath%","%FileName%"
goto :eof

追问

无法使用,放在文件夹内,双击没反映

追答

不可能啊!我这边测试正常后,才把代码发出来的。

追问

处理 文件夹不是当前目录中的

追答

这个处理目录是需要自定义设置的,如果要处理当前目录的,只需把代码中的D:\Pictures改成%~dp0即可。

处理非当前目录的,那么就设置其它的目录路径到脚本代码中即可,这样脚本也不需要非放到要处理的文件夹中执行了。

追问

年份和时分秒提取的不对

追答

怎么不对了?这代码中的那个命令明明就是获取文件的最后修改时间啊!

追问

改了下面几个地方才正确
set Ext=*
set SrcDir= %~dp0
echo "%LastTime:~,4%/%LastTime:~4,2%/%LastTime:~6,2% %LastTime:~8,2%:%LastTime:~10,2%:%LastTime:~12,2%","%FileFullPath%","%FileName%"

修改以上运行后,运行时提示 目录与卷标语法不正确

追答

哦!那可能是我疏忽大意了。没把时间那里截取处理好。

非常抱歉哈!

追问

目录与卷标语法不正确,是哪里的问题,帮忙看下

追答

Src=后面您是不是多了一个空格?

SrcDir=后面您是不是多了一个空格?

本回答被提问者采纳