Board logo

标题: [文件操作] [已解决]如何修改BAT代码实现一键遍历指定目录下文件并修改属性 [打印本页]

作者: yakeyun    时间: 2022-1-20 12:50     标题: [已解决]如何修改BAT代码实现一键遍历指定目录下文件并修改属性

本帖最后由 yakeyun 于 2022-1-23 16:38 编辑
  1. @echo off
  2. ::把批处理跟需处理的文件放在一起运行
  3. setlocal enabledelayedexpansion
  4. echo test >test.log
  5. for /f "delims=" %%a in ('dir /a-d /b ^|find  /i /v "dest.log"') do (
  6. set "file=%%~dpa%%a"
  7. set "file=!file:\=\\!"
  8. for /f "tokens=1* delims=. " %%b in ('wmic datafile where name^="!file!" get CreationDate ^|find "."') do set "creationdate=%%b"
  9. set "tmpdate=!creationdate:~,4!/!creationdate:~4,2!/!creationdate:~6,2!"
  10. set "tmptime=!creationdate:~8,2!:!creationdate:~10,2!:!creationdate:~12,2!"
  11. copy /b "%%a"+,, /y
  12. )
  13. 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行修改成这样试试:
  1. set "TargetFolder=D:\TEST"
  2. if not exist "%TargetFolder%\" (
  3.     goto :eof
  4. )
  5. cd /d "%TargetFolder%"
  6. >test.log echo test
  7. 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


试试这个代码能否满足需求
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. REM 设置待处理的文件夹
  4. set "TargetFolder=D:\TEST"
  5. if not exist "%TargetFolder%\" (
  6.     goto :eof
  7. )
  8. cd /d "%TargetFolder%"
  9. for /f "delims=" %%a in ('dir /b /s /a-d ^|find /i /v "%~f0"') do (
  10.     echo 正在处理文件 "%%a"
  11.     pushd "%%~dpa"
  12.     copy /b "%%~nxa"+,,
  13.     popd
  14. )
  15. 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

掉用代码:
  1. 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

结合上面大佬的帖子,完善了代码,可以通过第三方软件批量实时修改文件属性了。代码如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("""%~f0""","::",,"runas",1)(close)&exit /b
  3. cd /d "%~dp0"
  4. for /f "delims=" %%i in ('powershell -c "Get-Date -UFormat '%%d-%%m-%%Y %%H:%%M:%%S'"') do (
  5.     set "SysTS=%%i"
  6. )
  7. echo %SysTS%
  8. >BulkFileChanger.cfg echo.
  9. @echo y |copy BulkFileChanger.cfg + A.DLL BulkFileChanger.cfg >nul 2>nul
  10. echo ChangeTime.Created.DateTime=%SysTS% >>BulkFileChanger.cfg
  11. @echo y |copy BulkFileChanger.cfg + B.DLL BulkFileChanger.cfg >nul 2>nul
  12. echo ChangeTime.Modified.DateTime=%SysTS% >>BulkFileChanger.cfg
  13. @echo y |copy BulkFileChanger.cfg + C.DLL BulkFileChanger.cfg >nul 2>nul
  14. echo ChangeTime.Accessed.DateTime=%SysTS% >>BulkFileChanger.cfg
  15. @echo y |copy BulkFileChanger.cfg + D.DLL BulkFileChanger.cfg >nul 2>nul
  16. echo ChangeTime.StoredInFile.DateTime=%SysTS% >>BulkFileChanger.cfg
  17. @echo y |copy BulkFileChanger.cfg + E.DLL BulkFileChanger.cfg >nul 2>nul
  18. BulkFileChanger  /cfg ".\BulkFileChanger.cfg" /ChangeTimeAttr "D:\TEST" "*" 10 0
  19. BulkFileChanger  /cfg ".\BulkFileChanger.cfg" /ChangeTimeAttr "C:\INTEL\" "*" 10 0
  20. 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://bbs.bathome.net/) Powered by Discuz! 7.2