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

[文件操作] 求个批处理,或VBS,把文件夹里指定日期的文件 移动到 新建的以日期为名称的文件夹里

[复制链接]
发表于 2023-9-4 09:59:32 | 显示全部楼层 |阅读模式
求助大家,做个批处理,或者VBS,每天运行,把文件夹里指定日期的文件 移动到 新建的以日期为名称的文件夹里,比如:

C:\sample\ 里面有按日期生成的文件:
2023-09-01-1.txt
2023-09-01-2.txt
。。。
2023-09-02-1.txt
2023-09-02-2.txt
。。。
2023-09-03-1.txt
2023-09-03-2.txt
。。。

批处理,或vbs,在 C:\sample\ 里面生成一个 以昨天的日期为名称的文件夹,比如,今天是2023年9月4日,则生成一个名称是 2023-09-03 的文件夹,然后,把 C:\sampke 文件夹里 生成日期为 2023-09-03 全部文件移动到这个文件夹里,不是此日期生成的文件,不移动。
发表于 2023-9-4 14:14:30 | 显示全部楼层
本帖最后由 Five66 于 2023-9-4 14:16 编辑

啊,这居然要是昨天的
发表于 2023-9-4 14:40:28 | 显示全部楼层
回复 1# szmsys


请参考Q-04把bat文件保存为ANSI编码放在C:\sample文件夹下:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
  1. @echo off
  2. cd /d "%~dp0"
  3. REM 指定天数
  4. set "DaysAgo=1"
  5. for /f %%i in ('powershell -c "Get-Date (Get-Date).AddDays(-%DaysAgo%) -uformat "%%Y-%%m-%%d""') do (
  6.     set "DstDate=%%i"
  7. )
  8. if not exist "%DstDate%" (
  9.     md "%DstDate%"
  10. )
  11. move "%DstDate%-*.txt" "%DstDate%"
复制代码
每天定时执行请参考:批处理系统管理之4 - 任务计划篇
https://mp.weixin.qq.com/s/LKTmJuq45bZbxoGVTfla1w

评分

参与人数 1技术 +1 收起 理由
szmsys + 1 谢谢,我试试

查看全部评分

发表于 2023-9-4 15:01:26 | 显示全部楼层
不知这样行否

  1. @set @theCopyLeft=0;/*&echo off
  2. set "ph=C:\sample"
  3. for /f %%a in ('cscript //nologo -e:jscript "%~f0"') do (
  4. if not exist "%%a" md "%%a"
  5. for /f "delims=" %%i in ('dir /b /a-d "%ph%\*" ^|findstr /b "%%a"') do (
  6. move "%ph%\%%i" "%%a"
  7. )
  8. )
  9. echo done&echo 4秒后自动关闭&timeout /t 4
  10. exit/b
  11. rem */

  12. var aaaaaa=new Date();
  13. aaaaaa.setHours(-24);//天数  1x24小时
  14. var bbb=aaaaaa.toLocaleString().substr(0,10).replace('/','-');
  15. WScript.Echo(bbb);
复制代码

评分

参与人数 1技术 +1 收起 理由
szmsys + 1 谢谢,我试试

查看全部评分

发表于 2023-9-5 10:57:02 | 显示全部楼层
【新需求】
第一步:在 C:\sample 下 生成一个以昨天的日期命名的文件夹:YYYY-MM-DD
第二步:把 C:\sample 下 生成日期不是今天的文件,全部移动到这个新建文件夹里

【新方案】
  1. @echo off
  2. cd /d "%~dp0"
  3. REM 指定天数
  4. set "DaysAgo=1"
  5. for /f %%i in ('powershell -c "Get-Date (Get-Date).AddDays(-%DaysAgo%) -uformat "%%Y-%%m-%%d""') do (
  6.     set "DstDate=%%i"
  7. )
  8. if not exist "%DstDate%" (
  9.     md "%DstDate%"
  10. )
  11. for /f %%i in ('powershell "Get-Date -uformat '%%Y-%%m-%%d'"') do (
  12.     set "Today=%%i"
  13. )
  14. for /f "delims=" %%i in ('dir /b /a-d *.txt ^| findstr /v /b "%Today%"') do (
  15.     move "%%i" "%DstDate%"
  16. )
  17. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
szmsys + 1 谢谢

查看全部评分

 楼主| 发表于 2023-9-5 12:10:20 | 显示全部楼层
回复 5# Batcher

群主好!经过测试,发现2个问题:
1、今天的文件也被移动到新建文件夹里了。
2、没有设置操作文件夹路径的地方,比如 c:\sample
d:\samlpe
发表于 2023-9-5 13:53:36 | 显示全部楼层
本帖最后由 Nsqs 于 2023-9-5 17:26 编辑
  1. # 2>nul&cls&title by Nsqs&powershell -noprofile -executionpolicy bypass "gc '%~f0'|Out-String|iex" & pause&exit

  2. $esc=[char]0x1b
  3. $ReadDate=-1
  4. $SourcePath=[System.IO.DirectoryInfo]::new('.').FullName
  5. $wa=New-Object -ComObject Word.Application
  6. $Main=$wa.Tasks|?{$_.Name -match 'by Nsqs'}
  7. do{
  8.         cls
  9. "        使用方法

  10.         $esc[92m输入日期时间,会计算当前目录下创建日期为前一天的文件$esc[0m
  11.        
  12.         比如输入:  $esc[96m参数                说明$esc[0m
  13.         $esc[93m输入参数$esc[0m   $esc[6;91m2023-9-20$esc[0m        那么会取当前目录下 $esc[91m2023$esc[0m $esc[94m年 $esc[91m9$esc[0m $esc[94m月$esc[0m $esc[91m19$esc[0m $esc[94m日$esc[0m 这一天的日期的文件, 输入格式随意 xxxx-/xx-/xx 都行
  14.         $esc[93m输入参数$esc[0m   $esc[6;91m-d$esc[0m                $esc[91mD:\ABC$esc[0m 会跳转至目标路径,然后可以再做处理
  15.         $esc[93m输入参数$esc[90m   $esc[6;91m-e$esc[0m                设置需要处理的文件, 或多个文件以逗号分隔,比如 $esc[91m*.txt,*.xlsx$esc[0m 等等
  16.         $esc[93m输入参数$esc[90m   $esc[6;91m-r$esc[0m                返回当前目录

  17. $esc[93m示例:$esc$esc[94m
  18. -d C:\sample\ -e *.txt$esc[0m
  19. "
  20.         "当前目录所在地址:`n$esc[94m$((gl).Path)$esc[0m`n"
  21.         "当前可能指向的文件:`n$esc[6;94m$(if(!$ext){'所有文件'}else{$ext})$esc[0m`n"
  22.     if($ReadDate -match '^(-d|-e)$'){"$esc[91m参数必须包含空格隔开!$esc[0m"}
  23.         $ReadDate=Read-Host @(if($ReadDate -eq -1 -or $ReadDate -match '-[ed]'){'请输入日期'}elseif($ReadDate -notmatch '\d{4}.\d+.?\d*' -and $ReadDate){'输入的不是日期格式'}else{'输入不能为空!(可输入q退出)'})
  24.         if($ReadDate -match '-d '){pushd ([regex]::Matches($ReadDate,'.*-d (.+?) +?.*').groups[1].value)}
  25.         if($ReadDate -match '-e '){$ext=[regex]::Matches($ReadDate,'.*-e (.+ *).*').groups[1].value}
  26.         if($ReadDate -match '^-r$'){pushd $SourcePath}
  27. }until($ReadDate -eq 'q' -or $ReadDate -match '\d{4}.\d+.?\d*' -and $ReadDate -notmatch '^-d \d{4}.\d+.?\d*$')
  28. if($ReadDate -eq 'q'){$Main.Close();return}
  29. $ReadDate=$ReadDate -replace ' *-d \d{4}.\d+.?\d* *'
  30. $ReadDate=[regex]::Matches($ReadDate,'.*(\d{4}.\d+.?\d*).*').groups[1].value
  31. if($ReadDate -match '^\d{4}.\d+$'){
  32.         $ReadDate=[datetime]$ReadDate
  33.         $lastDay=[datetime]::DaysInMonth($ReadDate.Year,$ReadDate.Month)
  34.         $ReadDate=[datetime]"$($ReadDate.ToString('yyyy-MM'))-$lastDay"
  35. }else{
  36.         $ReadDate=[datetime]$ReadDate
  37. }
  38. $FileDate=dir $ext -File|?{$_.CreationTime.Date -eq $ReadDate.AddDays(-1)}
  39. if(!$FileDate){"$esc[91m发现没有找到当前目录下昨天的日期类文件$esc[0m";return}
  40. $FileDate|%{
  41.         $folder=([datetime]$ReadDate).AddDays(-1).ToString('yyyy-MM-dd')
  42.         md $folder -Force
  43.         move $_ $folder -Force
  44. }
  45. "$esc[91m`n`n处理完毕!$esc[0m"
复制代码
以文件创建日期为准
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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