标题: [文件操作] [已解决]如何修改BAT代码实现一键遍历指定目录下文件并修改属性 [打印本页]
作者: yakeyun 时间: 2022-1-20 12:50 标题: [已解决]如何修改BAT代码实现一键遍历指定目录下文件并修改属性
本帖最后由 yakeyun 于 2022-1-23 16:38 编辑
- @echo off
- ::把批处理跟需处理的文件放在一起运行
- setlocal enabledelayedexpansion
- echo test >test.log
- for /f "delims=" %%a in ('dir /a-d /b ^|find /i /v "dest.log"') do (
- set "file=%%~dpa%%a"
- set "file=!file:\=\\!"
- for /f "tokens=1* delims=. " %%b in ('wmic datafile where name^="!file!" get CreationDate ^|find "."') do set "creationdate=%%b"
- set "tmpdate=!creationdate:~,4!/!creationdate:~4,2!/!creationdate:~6,2!"
- set "tmptime=!creationdate:~8,2!:!creationdate:~10,2!:!creationdate:~12,2!"
- copy /b "%%a"+,, /y
- )
- pause
复制代码
作者: Batcher 时间: 2022-1-20 15:19
回复 1# yakeyun
请举例说明这个代码实现的功能跟你的实际需求有哪些差异?
作者: yakeyun 时间: 2022-1-20 15:47
回复 2# Batcher
这个代码可以实现修改文件创建日期,修改日期为当前创建的“test.log”文件属性时间,但是只能把代码和文件放在一起使用,如果还有子目录就无法实现了。
现在系统修改后,可以遍历指定目录,比如D:\TEST\ 目录下的文件,并将文件属性创建时间和修改时间改成和test.log文件一致。
作者: Batcher 时间: 2022-1-20 19:21
回复 3# yakeyun
顶楼代码第4~5行修改成这样试试:- set "TargetFolder=D:\TEST"
- if not exist "%TargetFolder%\" (
- goto :eof
- )
- cd /d "%TargetFolder%"
- >test.log echo test
- for /f "delims=" %%a in ('dir /a-d /b /s ^|find /i /v "test.log"') do (
复制代码
作者: yakeyun 时间: 2022-1-20 19:49
本帖最后由 yakeyun 于 2022-1-20 20:43 编辑
回复 4# Batcher
测试结果是,它会把“test”子目录里面的文件复制到test目录下,文件时间属性没有修改。指定目录修改功能已经可以实现了,目前只有子目录文件属性修改不了。
('dir /a-d /b /s ^|find /i /v "test.log"') 把这个中间/s去掉后正常了,不过修改的只有test根目录文件时间和子目录文件夹时间,子目录文件时间没变。
作者: Batcher 时间: 2022-1-20 20:54
回复 5# yakeyun
试试这个代码能否满足需求- @echo off
- setlocal enabledelayedexpansion
- REM 设置待处理的文件夹
- set "TargetFolder=D:\TEST"
- if not exist "%TargetFolder%\" (
- goto :eof
- )
- cd /d "%TargetFolder%"
- for /f "delims=" %%a in ('dir /b /s /a-d ^|find /i /v "%~f0"') do (
- echo 正在处理文件 "%%a"
- pushd "%%~dpa"
- copy /b "%%~nxa"+,,
- popd
- )
- pause
复制代码
作者: yakeyun 时间: 2022-1-21 13:04
本帖最后由 yakeyun 于 2022-1-21 13:06 编辑
回复 6# Batcher
可以实现修改所有文件了,但是文件夹属性还是修改不了。
看来只能使用下面这个第三方软件实现了:
BulkFileChanger:更改多个文件的日期/时间/属性 http://www.nirsoft.net/utils/bulk_file_changer.html
掉用代码:- BulkFileChanger /cfg ".\BulkFileChanger.cfg" /ChangeTimeAttr "D:\TEST\" "*" 10 0
复制代码
只是需要处理下下面的配置文件,无法做到实时修改:
[General]
ShowGridLines=0
SaveFilterIndex=0
ShowInfoTip=1
ShowTimeInGMT=0
MarkOddEvenRows=0
AddWildCard.SubfolderDepth=0
AddWildCard.Wildcard=
AddFiles=1
AddFolders=1
ExecuteOptions.ShowWindow=1
ExecuteOptions.ExecuteCommand=
ChangeTime.Created.UseTime=1
ChangeTime.Created.UseDate=1
ChangeTime.Created.Add=0
ChangeTime.Created.AddValue=5
ChangeTime.Created.AddUnit=3
ChangeTime.Created.DateTime=21-01-2022 10:10:10
ChangeTime.Modified.UseTime=1
ChangeTime.Modified.UseDate=1
ChangeTime.Modified.Add=0
ChangeTime.Modified.AddValue=5
ChangeTime.Modified.AddUnit=3
ChangeTime.Modified.DateTime=21-01-2022 10:10:10
ChangeTime.Accessed.UseTime=0
ChangeTime.Accessed.UseDate=0
ChangeTime.Accessed.Add=0
ChangeTime.Accessed.AddValue=5
ChangeTime.Accessed.AddUnit=3
ChangeTime.Accessed.DateTime=21-01-2022 01:10:10
ChangeTime.StoredInFile.UseTime=0
ChangeTime.StoredInFile.UseDate=0
ChangeTime.StoredInFile.Add=0
ChangeTime.StoredInFile.AddValue=5
ChangeTime.StoredInFile.AddUnit=3
ChangeTime.StoredInFile.DateTime=21-01-2022 01:10:10
ChangeTime.CopyTimeFrom=1
ChangeTime.CopyTimeToCreated=1
ChangeTime.CopyTimeToModified=0
ChangeTime.CopyTimeToAccessed=1
ChangeTime.CopyToStoredInFile=0
ChangeTime.StoredInFileMode=0
ChangeTime._UseCopyTime=0
ChangeTime._TimeInGMT=0
ChangeAttr.Archive=1
ChangeAttr.Hidden=1
ChangeAttr.ReadOnly=1
ChangeAttr.System=1
ChangeAttr.Temporary=1
ChangeTime.TimeSequenceMode=0
WinPos=2C 00 00 00 00 00 00 00 01 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 93 00 00 00 AC 00 00 00 41 04 00 00 1E 03 00 00
Columns=96 00 00 00 FA 00 01 00 6E 00 02 00 6E 00 03 00 6E 00 04 00 64 00 05 00 5A 00 06 00 5A 00 07 00 C8 00 08 00 78 00 09 00
Sort=0
作者: yakeyun 时间: 2022-1-23 16:41
本帖最后由 yakeyun 于 2022-1-23 16:57 编辑
回复 7# yakeyun
【方案汇总】批处理标准化获取当前系统日期时间(20190315更新) - BAT原创&转载 - 批处理之家 批处理_BAT脚本_PowerShell_VBS_CMD_DOS_Perl_Python - Powered by Discuz! http://www.bathome.net/thread-3328-1-1.html
结合上面大佬的帖子,完善了代码,可以通过第三方软件批量实时修改文件属性了。代码如下:- @echo off&setlocal enabledelayedexpansion
- %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("""%~f0""","::",,"runas",1)(close)&exit /b
- cd /d "%~dp0"
-
- for /f "delims=" %%i in ('powershell -c "Get-Date -UFormat '%%d-%%m-%%Y %%H:%%M:%%S'"') do (
- set "SysTS=%%i"
- )
- echo %SysTS%
- >BulkFileChanger.cfg echo.
- @echo y |copy BulkFileChanger.cfg + A.DLL BulkFileChanger.cfg >nul 2>nul
- echo ChangeTime.Created.DateTime=%SysTS% >>BulkFileChanger.cfg
- @echo y |copy BulkFileChanger.cfg + B.DLL BulkFileChanger.cfg >nul 2>nul
- echo ChangeTime.Modified.DateTime=%SysTS% >>BulkFileChanger.cfg
- @echo y |copy BulkFileChanger.cfg + C.DLL BulkFileChanger.cfg >nul 2>nul
- echo ChangeTime.Accessed.DateTime=%SysTS% >>BulkFileChanger.cfg
- @echo y |copy BulkFileChanger.cfg + D.DLL BulkFileChanger.cfg >nul 2>nul
- echo ChangeTime.StoredInFile.DateTime=%SysTS% >>BulkFileChanger.cfg
- @echo y |copy BulkFileChanger.cfg + E.DLL BulkFileChanger.cfg >nul 2>nul
-
- BulkFileChanger /cfg ".\BulkFileChanger.cfg" /ChangeTimeAttr "D:\TEST" "*" 10 0
- BulkFileChanger /cfg ".\BulkFileChanger.cfg" /ChangeTimeAttr "C:\INTEL\" "*" 10 0
-
- exit/b
复制代码
下面是修改思路:
A.DLL
ChangeTime.Created.DateTime=21-01-2022 10:10:10
B.DLL
ChangeTime.Modified.DateTime=21-01-2022 10:10:10
C.DLL
ChangeTime.Accessed.DateTime=21-01-2022 10:10:10
D.DLL
ChangeTime.StoredInFile.DateTime=21-01-2022 10:10:10
E.DLL
@echo y |copy 源\log.log + 追加\log.log 源\log.log >nul 2>nul
文件及代码下载地址:
https://sanli.lanzouw.com/iguk0z5rrqf
https://sanli.lanzoui.com/iguk0z5rrqf
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |