找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 41806|回复: 23

[文件操作] [已解决]对批处理所在根目录下指定文件类型进行备份

[复制链接]
发表于 2024-7-5 12:06:44 | 显示全部楼层 |阅读模式
本帖最后由 jave000 于 2024-7-5 13:51 编辑

双击后,识别程序运行所在根目录文件夹内,指定的几个文件类型,比如jpg和pdf,其他类型不管,且修改日期为今天的,其他日期不管,将其备份到指定新建备份子目录内,并给备份文件加入修改日期后缀,格式为07052024,与源文件名连接符为“_"
发表于 2024-7-5 12:19:12 | 显示全部楼层
回复 1# jave000


大家对于“根目录”的理解各不相同,请发个图片举例看看:
  • 脚本在哪里
  • 待备份的文件在哪里
  • 新建备份文件夹在哪里


如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
发表于 2024-7-5 12:44:57 | 显示全部楼层
本帖最后由 ppll2030 于 2024-7-5 13:42 编辑

保存为bat文件,放在根目录下,
增加修改日期判定是否为当天
  1. @echo off
  2. if not exist backup md backup
  3. for /f "delims=" %%i in ('dir /b/a-d *.jpg *.pdf') do  (
  4.         for /f "delims= " %%a in ("%%~ti") do (
  5.                 if "%%a" == "%date%" copy "%%i" "backup\%%~ni_%date:~5, 2%%date:~8, 2%%date:~0, 4%%%~xi"
  6.         )
  7. )
  8. pause&exit
复制代码

评分

参与人数 1技术 +1 收起 理由
jave000 + 1 感谢帮助

查看全部评分

 楼主| 发表于 2024-7-5 13:11:37 | 显示全部楼层
回复 2# Batcher


     抱歉版主,标题写了,正文忘写了,是程序所在目录下
发表于 2024-7-5 13:13:18 | 显示全部楼层
  1. @echo off & setlocal enabledelayedexpansion

  2. set "list=jpg pdf"
  3. if not exist "%~dp0Backup" (mkdir "%~dp0Backup")
  4. for /f "tokens=3 delims=/ " %%i in ("!date!") do (set "today_date=%%i")
  5. for /f "tokens=1,2,3 delims=/ " %%i in ("!date!") do (set "new_name=%%j%%k%%i")
  6. for /f "skip=4 tokens=1,4,* delims= " %%a in ('dir /od') do (
  7.         for /f "tokens=3 delims=/" %%i in ("%%a") do (set "file_date=%%i")
  8.         if "!file_date!" equ "!today_date!" (
  9.                 for /f "delims=" %%i in ("%%b %%c") do (
  10.                         for %%f in (!list!) do (
  11.                                 if "%%~xi" equ ".%%f" (
  12.                                         copy /y "%%i" "%~dp0Backup" >nul && ren "%~dp0Backup\%%i" "%%~ni_!new_name!%%~xi"
  13.                                 )
  14.                         )
  15.                 )
  16.         )
  17. )

  18. pause
复制代码
仅支持备份Bat程序当前位置中指定类型的文件

评分

参与人数 1技术 +1 收起 理由
jave000 + 1 感谢帮助

查看全部评分

 楼主| 发表于 2024-7-5 13:15:22 | 显示全部楼层
回复 3# ppll2030


    谢谢,这个没有判断指定类型的文件是否是今天的修改日期
 楼主| 发表于 2024-7-5 13:24:31 | 显示全部楼层
回复 5# microsoft_yaw


    正常运行,出现过一次同时备份了原文件和加了后缀的原文件,俩都在,看不出为啥。其他时候测试都正常。非常感谢
发表于 2024-7-5 13:37:27 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-7-5 13:43 编辑

回复 1# jave000

  1. @echo off &setlocal enabledelayedexpansion
  2. if not exist "新建备份" md "新建备份"
  3. for /f "delims=" %%F in ('dir /b/a-d *.jpg *.pdf') do (set "t=%%~tF"&if "%date%"=="!t:~,10!" copy /y "%%F" "新建备份\%%~nF_!t:~5,2!!t:~8,2!!t:~,4!%%~xF")
  4. endlocal&pause&exit
复制代码

评分

参与人数 1技术 +1 收起 理由
jave000 + 1 感谢帮助

查看全部评分

发表于 2024-7-5 13:43:01 | 显示全部楼层
回复 6# jave000


    2楼已修改,增加了对文件修改日期识别是否为当日。
发表于 2024-7-5 13:43:43 | 显示全部楼层
回复 7# jave000


    已优化:
  1. @echo off & setlocal enabledelayedexpansion

  2. set "list=jpg pdf"
  3. if not exist "%~dp0Backup" (mkdir "%~dp0Backup")
  4. for /f "tokens=1,2,3 delims=/ " %%i in ("!date!") do (set "today_date=%%k" & set "new_name=%%j%%k%%i")
  5. for /f "skip=4 tokens=1,4,* delims= " %%a in ('dir /od') do (
  6.         for /f "tokens=3 delims=/" %%i in ("%%a") do (set "file_date=%%i")
  7.         if "!file_date!" equ "!today_date!" (
  8.                 for /f "delims=" %%i in ("%%b %%c") do (
  9.                         for %%f in (!list!) do (
  10.                                 if "%%~xi" equ ".%%f" (
  11.                                         if not exist "%~dp0Backup\%%~ni_!new_name!%%~xi" (
  12.                                                 copy /y "%%i" "%~dp0Backup" >nul && echo 备份 %%i 成功^^!
  13.                                                 ren "%~dp0Backup\%%i" "%%~ni_!new_name!%%~xi" && echo 重命名 %%i -^> %%~ni_!new_name!%%~xi 成功^^!
  14.                                         ) else (echo %%~ni_!new_name!%%~xi 已存在,备份失败^^!)
  15.                                 )
  16.                         )
  17.                 )
  18.         )
  19. )

  20. pause
复制代码
如出现乱码,请将Bat程序的编码格式修改为ANSI

评分

参与人数 1技术 +1 收起 理由
jave000 + 1 感谢帮助

查看全部评分

发表于 2024-7-5 13:46:54 | 显示全部楼层
  1. @echo off
  2. cd /d "%~dp0"
  3. set "f=d:\new"
  4. md "%f%" 2>nul
  5. for /f %%a in ('wmic os get localdatetime ^|findstr [0-9]') do (
  6.         set today=%%a
  7. )
  8. for /f "delims=" %%i in ('dir /b /a-d *.jpg *.pdf') do (
  9.         if "%%~ti" geq "%today:~0,4%/%today:~4,2%/%today:~6,2% 00:00" (
  10.                 copy "%%i" "%f%\%%~ni_%today:~0,4%%today:~4,2%%today:~6,2%%%~xi"
  11.         )
  12. )
  13. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
jave000 + 1 感谢帮助

查看全部评分

 楼主| 发表于 2024-7-5 13:49:37 | 显示全部楼层
回复 8# aloha20200628


    没有备份文件出现
发表于 2024-7-5 14:23:16 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-7-5 15:15 编辑

回复 12# jave000

系统默认%%~tF是取自文件修改时间戳,for循环还可简化一步...用以下代码模拟楼主一楼示例条件已测试通过
在本批所在目录中创建 “新建备份” 子目录,并获取全部目标文件*.jpg *.pdf,检查每个文件的修改时间戳是否与当日相同,是则复制到  “新建备份”  子目录中...

  1. @echo off &setlocal enabledelayedexpansion
  2. if not exist "新建备份" md "新建备份"
  3. for %%F in (*.jpg *.pdf) do (set "t=%%~tF"&if "%date:~,10%"=="!t:~,10!" copy /y "%%F" "新建备份\%%~nF_!t:~5,2!!t:~8,2!!t:~,4!%%~xF")
  4. endlocal&pause&exit/b
复制代码

评分

参与人数 1技术 +1 收起 理由
jave000 + 1 感谢帮助

查看全部评分

发表于 2024-7-5 14:28:21 | 显示全部楼层


直接用%date%,在不同代码页下结果不相同。这个帖子中的方法获取日期挺好的,【方案汇总】批处理标准化获取当前系统日期时间
发表于 2024-7-5 14:40:28 | 显示全部楼层
回复 14# 77七

win8.1简中系统》改变chcp 936或chcp 65001对%date%返回值没有影响
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 00:17 , Processed in 0.021872 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表