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

[文件操作] [已解决]求批处理自动整理桌面文件并以日期归档 望大侠指点

[复制链接]
发表于 2015-11-21 16:38:05 | 显示全部楼层 |阅读模式
把今天--桌面---上的(新建文件 或者 下载的或者粘贴复制过来的文件)无论任何类型的文件归档到归档文件夹下以日期命名(按日期年月日如20150101)的文件夹里面,只处理今天的,之前(前天明天)之后的文件都不需要要处理,补充 桌面上的快捷方式也不要删除 谢谢
求批处理脚本, 望大侠指点
最终效果是  桌面上 只有我的电脑 回收站 归档 (在归档里有20150101 20150102 20150102.。。。。。)  和 不是今天的文件,还有一些快捷方式。不知道我说明白了没有


望各位坛友不吝赐教!!!


1 补充如果假如归档之日期命名的文件夹中已有相同文件,请教如何不要覆盖,相同文件归档之后变成   名称-1  ,名称-2 ,名称-3 这样形式的

2 还有一种情况可能难处理 就是剪切到桌面上的文件,它还是以前的日期 请问是否有方法把剪切过来的文件也归档到以今天日期命名的文件夹之中了(如无法解决 可以不管剪切到桌面上的文件)

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-11-21 21:04:16 | 显示全部楼层
本帖最后由 依山居 于 2015-11-21 21:05 编辑

没能力自己学就乖乖自己下个备份软件去。
Cobian Backup 免费开源,相当专业的文件备份软件。用过有好感。
发表于 2015-11-21 22:13:34 | 显示全部楼层
回复 1# erjnasrtnws
  1. @echo off & color 0d
  2. for /f "tokens=2,*" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Desktop"') do (
  3. set "desktop_dir=%%j"
  4. )

  5. ——————————————————————————————————————————————
  6. set "back_dir=d:\桌面备份\%date:~0,4%-%date:~5,2%桌面备份"
  7. set "back_dir1=%date:~0,4%-%date:~5,2%桌面备份"

  8. set "back_dir_favo=d:\桌面备份\%date:~0,4%-%date:~5,2%桌面备份\收藏夹"


  9. if not exist "d:\桌面备份" (md "d:\桌面备份")
  10. if not exist "%back_dir%" (md "%back_dir%")

  11. if not exist "%back_dir_favo%" (md "%back_dir_favo%")

  12. 1set "filesdate=%date:~0,4%%date:~5,2%%date:~8,2%"


  13. ——————————————————————————————————————————————
  14. robocopy "%desktop_dir%" "%back_dir%" /move /e /xf *.lnk

  15. robocopy "%userprofile%\Favorites" "d:\00beifen\备份\7Favorites" /mir /w:2 /r:2

  16. robocopy "%userprofile%\Favorites" "%back_dir_favo%" /mir /w:2 /r:2


  17. ——————————————————————————————————————————————
  18. for /f "delims=" %%a in ('dir /a-d /b /s "%desktop_dir%\*.*"') do (
  19. if "%%~xa" neq ".lnk" (del "%%a" /f /s /q)
  20. )

  21. for /f "delims=" %%b in ('dir /ad /b /s "%desktop_dir%"^|sort /r') do (rd "%%b" /s /q)


  22. ——————————————————————————————————————————————
  23. (echo Set objShell=CreateObject^("WScript.Shell"^)
  24. echo DesktopPath=objShell.SpecialFolders^("Desktop"^)
  25. echo Set objlink=objShell.CreateShortcut^(DesktopPath ^& "\%back_dir1%.lnk"^)
  26. echo objlink.Hotkey="CTRL+Q"
  27. echo objlink.WindowStyle=3
  28. echo objlink.TargetPath="%back_dir%"
  29. echo objlink.Save
  30. )>"%temp%\mysendto.vbs"
  31. start /wait "" "%temp%\mysendto.vbs"

  32. cls
  33. ping 127.0.0.1 -n 5 >nul 2>nul
  34. del /q "%temp%\mysendto.vbs"



  35. ——————————————————————————————————————————————
  36. title 重启explorer资源管理器不关闭打开的文件夹
  37. 1set/p "p=即将重启 Explorer,"<nul & 1pause

  38. Call :_RestartExplorer
  39. echo 完成!
  40. 1pause

  41. cls
  42. ping 127.0.0.1 -n 5 >nul 2>nul

  43. start "" "%back_dir%"

  44. exit



  45. :: 重启 Explorer
  46. goto :eof
  47. :_RestartExplorer
  48.   ( echo Set objWsh = CreateObject^("WScript.Shell"^)
  49.   echo Set objShell = CreateObject^("Shell.Application"^)
  50.   echo For Each objWin In objShell.Windows
  51.   echo   If Instr^(LCase^(objWin.FullName^),"\explorer.exe"^) Then
  52.   echo     strURL = strURL ^& objWin.LocationURL ^& vbCrLf
  53.   echo   End If
  54.   echo Next
  55.   echo If strURL = "" Then WScript.Quit
  56.   echo strURL = Left^(strURL, Len^(strURL^)-Len^(vbCrLf^)^)
  57.   echo arrURL = Split^(strURL, vbCrLf^)
  58.   echo objWsh.run "cmd /c taskkill /f /im explorer.exe & start """" explorer", 0, True
  59.   echo For Each strURL In arrURL
  60.   echo   objShell.Explore strURL
  61.   echo Next )>"%temp%\RestartExplorer.vbs"
  62.   CScript //NoLogo "%temp%\RestartExplorer.vbs"
  63.   del /q /f "%temp%\RestartExplorer.vbs"
  64.   goto :eof
复制代码

评分

参与人数 1技术 +1 收起 理由
erjnasrtnws + 1 谢谢指教

查看全部评分

发表于 2015-11-21 22:14:10 | 显示全部楼层
回复 1# erjnasrtnws


robocopy.exe自己网上下载。。。
发表于 2015-11-21 23:39:18 | 显示全部楼层
本帖最后由 依山居 于 2015-11-21 23:41 编辑

回复 4# ygqiang


取当前用户桌面路径,从当前用户变量中取,代码量应该更加少。%HOMEPATH%\desktop 这样就行了。
  1. o( ̄▽ ̄)o 2015/11/21 周六23:40:29.02 <( ̄︶ ̄)>
  2. c:\>cd %HOMEPATH%\desktop

  3. o( ̄▽ ̄)o 2015/11/21 周六23:40:31.45 <( ̄︶ ̄)>
  4. c:\Users\xxx\Desktop>
复制代码
发表于 2015-11-22 00:24:32 | 显示全部楼层
本帖最后由 terse 于 2015-11-25 11:17 编辑
  1. @if(0)==(0) echo off & CScript -NoLogo -E:JScript %0 & exit @end
  2. Date.prototype.Format = function (fmt) {
  3.     var o = {
  4.         "M+": this.getMonth() + 1,
  5.         "d+": this.getDate()
  6.     };
  7.     if (/(y+)/.test(fmt))
  8.         fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  9.     for (var k in o)
  10.         if (new RegExp("(" + k + ")").test(fmt))
  11.             fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  12.     return fmt;
  13. }
  14. var Shell = WScript.CreateObject("WScript.Shell");
  15. var fso = WScript.CreateObject("Scripting.FileSystemObject");
  16. var strDesktop = Shell.SpecialFolders("Desktop");
  17. var ff = strDesktop + "\\归档\" + new Date().Format("yyyyMMdd");
  18. if(!fso.FolderExists(ff)){
  19.    fso.CreateFolder(ff);
  20. };
  21. var d = new Date();
  22. var Folder= fso.GetFolder(strDesktop);
  23. for(var e=new Enumerator(Folder.Files);!e.atEnd();e.moveNext()){
  24.    var f=e.item();
  25.    var t = parseInt(Math.round(d - f.Datecreated)/86400000);
  26.    if (t == 0) {
  27.     f.Move(ff+ "\" + f.name);
  28.    }
  29. }
复制代码

评分

参与人数 1技术 +1 收起 理由
erjnasrtnws + 1 谢谢大侠

查看全部评分

发表于 2015-11-22 12:28:36 | 显示全部楼层
回复 5# 依山居


    你这个代码,xp/win7系统不通用吧?
发表于 2015-11-22 12:37:47 | 显示全部楼层
回复 7# ygqiang


    开虚拟机验证了一下。有这个变量。确实不兼容,路径名是中文也就是cd %homepath%\桌面

win 7 是%homepath%\desktop
发表于 2015-11-22 12:56:14 | 显示全部楼层
测试了一下可以这样写。
  1. cd /d "%USERPROFILE%\desktop"|| cd /d "%USERPROFILE%\桌面"
复制代码

评分

参与人数 1技术 +1 收起 理由
erjnasrtnws + 1 给力

查看全部评分

 楼主| 发表于 2015-11-23 08:21:12 | 显示全部楼层
再次谢谢3楼 6楼的热心指点
 楼主| 发表于 2015-11-25 10:12:03 | 显示全部楼层
回复 3# ygqiang
大侠请问,你的代码XP可以使用吗?我在XP中使用发现桌面的文件的确没有了呵呵 这效果很好 正好想把快捷方式留在z桌面 可是在D盘的桌面备份文件夹里也是空的,不知道文件到哪里去了 !代码运行时,显示删除快捷方式错误《不知道是否对运行最终结果产生影响了???本人希望保留快捷方式不删除
求大侠指点
 楼主| 发表于 2015-11-25 10:16:12 | 显示全部楼层
回复 6# terse
大侠你的代码无反应l!!!我在XP中运行的 需要注意些什么了??
发表于 2015-11-25 11:17:31 | 显示全部楼层
回复 12# erjnasrtnws
已修改 代码第一行 echo off 后面 加个 &
  1. echo off & CScript...........
复制代码

评分

参与人数 1技术 +1 收起 理由
erjnasrtnws + 1 谢谢 很牛 试过了 呵呵

查看全部评分

发表于 2015-11-25 13:31:54 | 显示全部楼层
本帖最后由 WHY 于 2015-11-25 13:41 编辑
  1. @echo off
  2. set "s=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
  3. for /f "tokens=2*" %%i in ('reg query "%s%" /v Desktop') do (
  4.     set "Desktop=%%j"
  5. )
  6. for /f %%i in ('wmic os get LocalDateTime^|findstr /b [0-9]') do (
  7.     set "Today=%%i"
  8. )

  9. set "Today=%Today:~0,8%"
  10. md "%Desktop%\归档\%Today%" 2>nul

  11. set "MyPath=%Desktop:~2%"
  12. set wql=where "drive='%Desktop:~0,2%' and path='%MyPath:\=\\%'"
  13. for /f "tokens=1*" %%i in ('wmic datafile %wql% get creationdate^,name^|findstr /b %Today%')do (
  14.     for /f "delims=" %%j in ("%%j") do (
  15.         if /i not "%%~fj" == "%~f0" move "%%~fj" "%Desktop%\归档\%Today%"
  16.     )
  17. )
  18. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
erjnasrtnws + 1 很好 谢谢

查看全部评分

 楼主| 发表于 2015-11-25 14:02:27 | 显示全部楼层
本帖最后由 erjnasrtnws 于 2015-11-25 14:14 编辑

回复 14# WHY

谢谢  刚刚试了效果很好
望大侠改进!!!!!
1请问如何保留桌面的快捷方式了??? 希望把快捷方式图标留在桌面上,求指点
2,如何实现和3楼一样的效果,就是把不是今天新建的文件(是从其它盘拷贝到桌面上的不是今天的文件)也可以放入归档之中

如能实现那就对我来说相当完美了,我会终身珍藏的

本人能力低微,望大侠不吝赐教!!!!谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 06:05 , Processed in 0.034467 second(s), 13 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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