标题: [文件操作] 移动当天文件夹和文件到当天日期文件夹的bat代码怎么写? [打印本页]
作者: onging 时间: 2024-9-6 09:58 标题: 移动当天文件夹和文件到当天日期文件夹的bat代码怎么写?
当天日期文件夹也想要通过bat生成,谢谢大佬们!
作者: flashercs 时间: 2024-9-6 11:16
- @echo off
- cd /d "%~dp0"
- @REM 把当前目录下 创建日期是今天的文件和文件夹移动到 今天'yyyy-MM-dd'文件夹
- set "batchfile=%~f0"
- powershell -c "$today=[datetime]::Today;$di=[io.directory]::CreateDirectory($today.ToString('yyyy-MM-dd'));gci|where{$_.CreationTime.Date -eq $today -and $_.FullName -ne $di.FullName -and $_.FullName -ne $env:batchfile}|Move-Item -Destination ($di.FullName) -Verbose"
- pause
复制代码
作者: aloha20200628 时间: 2024-9-6 12:45
本帖最后由 aloha20200628 于 2024-9-6 14:20 编辑
回复 1# onging
新建当天文件夹例如 "2024-09-06" 与当前文件夹平级
以下批处代码存为 test.bat 置于当前文件夹下运行,将当前文件夹下当天创建生成的全部文件(排除本批处脚本文件)和子文件夹移到新建当天文件夹中 ...
- @echo off &md "..\%date:~,10%" 2>nul
- (for /f "tokens=3* delims= " %%a in ('dir /tc/o-d^|findstr /bc:"%date:~,10% " ') do if "%%b" neq "." if "%%b" neq ".." if /i "%%b" neq "%~nx0" move /y "%%b" "..\%date:~,10%\") 2>nul
- pause&exit/b
复制代码
作者: onging 时间: 2024-9-6 13:42
回复 3# aloha20200628
谢谢!您的代码不起作用呢,flashercs大佬的就可以
作者: onging 时间: 2024-9-6 13:43
回复 2# flashercs
谢谢!可以了!
作者: aloha20200628 时间: 2024-9-6 14:05
本帖最后由 aloha20200628 于 2024-9-6 14:40 编辑
回复 4# onging
我测试顺利通过的系统:
系统日期变量 %date% 采用的序列和分隔符如是 2024-09-06,命令行用 echo,%date% 即可查看结果;
系统码页(命令行用 chcp 查看)是936,不是65001
与楼主有差别吗?
重新调整了3楼代码获取当天时间值的方法,如果与楼主采用的系统码页没有差别,再试试3楼代码应该可以了...
作者: ppll2030 时间: 2024-9-6 17:11
回复 6# aloha20200628
楼主的系统日期可能还是默认用的 / 分隔符。所以无法正确创建文件夹
作者: aloha20200628 时间: 2024-9-6 18:54
本帖最后由 aloha20200628 于 2024-9-6 21:59 编辑
回复 7# ppll2030
回复 4# onging
谢谢!据此再修理一下3楼代码如下。
想起了以前曾和77七讨论过不同系统版本的%date%返回值不一定相同的问题,稳妥之策还是要用 %date:~0,10% 取值...
- @echo off &setlocal &set "td=%date:/=-%"
- md "..\%td:~0,10%" 2>nul
- (for /f "tokens=3* delims= " %%a in ('dir /tc/o-d^|findstr /bc:"%td:~0,10% " ') do if "%%b" neq "." if "%%b" neq ".." if /i "%%b" neq "%~nx0" move /y "%%b" "..\%td:~0,10%\") 2>nul
- endlocal&pause&exit/b
复制代码
作者: onging 时间: 2024-9-6 19:12
本帖最后由 onging 于 2024-9-6 19:14 编辑
回复 8# aloha20200628
依然不起作用
我的是win7系统,日期应该是默认的,上传图片失败呢?
作者: ppll2030 时间: 2024-9-6 20:55
本帖最后由 ppll2030 于 2024-9-6 20:57 编辑
回复 9# onging
哈哈,大佬今天可能有点晕。
你试试把第三行前半部分的个地方改一下试试。
/bc:"%td:~0,10% " 改为 /bc:"%date:~0,10% "
作者: flashercs 时间: 2024-9-6 21:09
回复 9# onging
上传图片可用图床: http://bbs.bathome.net/thread-60985-1-1.html
系统日期格式
dir日期格式
作者: 77七 时间: 2024-9-6 21:24
- @echo off
- cd /d "%~dp0"
- for /f %%a in ('wmic os get localdatetime ^| findstr [0-9]') do (
- set d=%%a
- )
- for /f "tokens=1-3*" %%a in ('dir /tc ^| findstr /rive /c:"\." /c:"\.bat" /c:"\.cmd"') do (
- if "%%a" equ "%d:~0,4%/%d:~4,2%/%d:~6,2%" (
- if "%%d" neq "%d:~0,4%-%d:~4,2%-%d:~6,2%" (
- if exist "%%d\" (
- robocopy "%%d" "%d:~0,4%-%d:~4,2%-%d:~6,2%/%%d" /e /move
- ) else (
- robocopy . "%d:~0,4%-%d:~4,2%-%d:~6,2%" "%%d" /mov
- )
- )
- )
- )
- pause
复制代码
作者: Batcher 时间: 2024-9-6 21:49
回复 9# onging
如果需要上传文件,请用使用网盘。
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: aloha20200628 时间: 2024-9-6 21:56
本帖最后由 aloha20200628 于 2024-9-6 22:09 编辑
回复 9# onging
谢谢10,11楼提醒
若楼主 dir 列表显示的时间格式如11楼所示 2024/09/06 周五 .... 则8楼代码须订正如下,其实就是多了一个 ‘周五’ 的字段
- @echo off &setlocal &set "td=%date:/=-%"
- md "..\%td:~0,10%" 2>nul
- (for /f "tokens=4* delims= " %%a in ('dir /tc/o-d^|findstr /bc:"%date:~0,10% " ') do if "%%b" neq "." if "%%b" neq ".." if /i "%%b" neq "%~nx0" move /y "%%b" "..\%td:~0,10%\") 2>nul
- endlocal&pause&exit/b
复制代码
作者: aloha20200628 时间: 2024-9-7 00:12
本帖最后由 aloha20200628 于 2024-9-7 19:38 编辑
为批处应对此类题型留下前车之鉴》
取值 %date% 须截取 %date:~0,10%,
用其创建目录前须置换其中分隔符 %date:/=-%,
提取 dir 全量列表后几项数据前须检测其中时间字段的个数...
以下代码是对3,8,14楼代码的完整修复... 运行结果会将 ‘d:\目标文件夹’ 中当日创建生成的目录和文件移至 ‘d:\目的地文件夹\20240907’ 目录中...
- @echo off &setlocal &set "td=%date:/=-%"
- cd /d "d:\目标文件夹" &set "td=d:\目的地文件夹\%td:~0,10%"
- md "%td%" 2>nul &set "tf=%td%\all.tmp"
- dir /tc/o-d|findstr /bc:"%date:~0,10% ">"%tf%" &set/p s=<"%tf%"
- if "%s:~14,1%"==":" (set "q=3") else (set "q=4")
- (for /f "tokens=%q%* delims= " %%a in (%tf%) do if "%%b" neq "." if "%%b" neq ".." if /i "%%b" neq "%~nx0" move /y "%%b" "%td%\")>nul 2>nul
- del /q "%tf%"&endlocal&pause&exit/b
复制代码
作者: onging 时间: 2024-9-7 08:45
回复 11# flashercs
谢谢!我系统日期格式是:2024/9/7 是斜杠的
作者: onging 时间: 2024-9-7 09:04
回复 onging
如果需要上传文件,请用使用网盘。
如果需要上传截图,可以找个图床,例如:
Batcher 发表于 2024-9-6 21:49
谢谢,下次注意!
作者: onging 时间: 2024-9-7 09:14
回复 15# aloha20200628
这段可以谢谢!但想修改一下,他默认是在上一级目录生成日期文件夹,可不可以指定目录生成日期文件夹并移动吗?,还有可以取消回显吗?
作者: aloha20200628 时间: 2024-9-7 16:33
本帖最后由 aloha20200628 于 2024-9-7 16:41 编辑
回复 18# onging
是要指定一个已有的 ‘目的地’ 文件夹?还是要新建一个自定义名称的 ‘目的地’ 文件夹? 总之,建议这个 ‘目的地’ 文件夹尽可能与当前文件夹分开...
15楼代码已更新,关闭了 move 过程的回显...
作者: onging 时间: 2024-9-7 17:34
回复 onging
是要指定一个已有的 ‘目的地’ 文件夹?还是要新建一个自定义名称的 ‘目的地’ 文件夹? ...
aloha20200628 发表于 2024-9-7 16:33
谢谢!这段代码在那里更改“要移动的当天文件夹和文件的目录”和“当天日期文件夹的目录”呢,不好意思,菜鸟一枚!
作者: aloha20200628 时间: 2024-9-7 18:53
本帖最后由 aloha20200628 于 2024-9-7 18:57 编辑
回复 20# onging
在已被订正的15楼代码第二行》
d:\目标文件夹 可改为你要移动当日数据的文件夹名(须是全路径,例如 d:\abc\1)
d:\目的地文件夹 可改为被移动数据的目的地文件夹名(须是全路径,例如 d:\xyz\1),在此文件夹下将生成名如 ‘2024-09-07’ 的当日文件夹
作者: onging 时间: 2024-9-9 08:50
回复 onging
在已被订正的15楼代码第二行》
d:\目标文件夹 可改为你要移动当日数据的文件夹名(须 ...
aloha20200628 发表于 2024-9-7 18:53
谢谢!这个更完美,但还想取消“请按任意键继续”的弹窗,应该删除那一段呢?
作者: aloha20200628 时间: 2024-9-9 10:28
回复 22# onging
代码最后一行改为》 del /q "%tf%"&endlocal&exit/b 即可
作者: onging 时间: 2024-9-9 11:49
回复 23# aloha20200628
谢谢!还想问一下,英文系统和中文系统都会通用的吗?主要是时间格式
作者: aloha20200628 时间: 2024-9-9 12:53
回复 24# onging
老美用的英文版有可能采用 08/31/2024 这类时间格式,可先用小样本数据试一下代码看看结果...
作者: onging 时间: 2024-9-10 08:54
回复 25# aloha20200628
谢谢!,也一样可以了
作者: qixiaobin0715 时间: 2024-9-10 09:11
需要什么格式可以再系统里自己设置:
作者: 77七 时间: 2024-9-10 12:19
多谢11楼、27楼两位大佬提醒
重新写了一个,尽量排除 不同系统或者个性化设置导致的日期时间格式不同影响。- @echo off
- cd /d "%~dp0"
- for /f %%a in ('wmic os get localdatetime ^| findstr [0-9]') do (
- set d=%%a
- )
- set d=%d:~0,4%-%d:~4,2%-%d:~6,2%
- cd.>d.d
- for /f "tokens=1*" %%i in ('dir /tc "d.d" ^| findstr "d\.d$"') do (
- for %%a in (%%j) do (
- set /a n+=1
- )
- set _d=%%i
- )
- del d.d
- for /f "tokens=%n%*" %%a in ('dir /tc ^| findstr "^%_d%" ^| findstr /iv "\.$ \.cmd$ \.bat$ [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$"') do (
- if exist "%%b\" (
- robocopy "%%b" "%d%\%%b" /e /move
- ) else (
- robocopy . "%d%" "%%b" /mov
- )
- )
- pause
复制代码
作者: aloha20200628 时间: 2024-9-10 15:03
本帖最后由 aloha20200628 于 2024-9-11 11:15 编辑
进一步验证》系统日期的格式设置确实有很多种,其设置结果基本与资源管理器的日期显示格式一致,但与%date%, %%~tF和dir列表的日期取值格式不一定相同,无论系统日期格式如何调整,后三者除了分隔符与其保持一致之外,日期值净长度总是在8位(如24-01-31)或10位(如2024-01-31)取值,而资源管理器的日期显示格式可在6-10位之间变化,因此%date%的更稳妥取值方法是用 for /f "tokens=1 delims= " %%a in ("%date%") do set "td=%%a"
以下代码是将15楼代码重写成不调用findstr筛选当日数据的版本,直接用dir/b/tw/o-d排序,令当日数据置顶,从而能对其首先处理并及时结束退出,也免去了采用findstr须检测时间字段个数等关联处理问题...
- @echo off &setlocal
- for /f "tokens=1 delims= " %%a in ("%date%") do set "td=%%a"
- if "%td:~8,1%"=="" (set "e=tt:~0,8") else set "e=tt:~0,10"
- cd /d "d:\目标文件夹" &set "dt=d:\目的地文件夹\%td:/=-%"
- md "%dt%" 2>nul
- for /f "delims=" %%F in ('dir /b/tw/o-d') do if "%%~fF" neq "%~f0" (
- setlocal enabledelayedexpansion &set "tt=%%~tF" &set "tt=!%e%!"
- if "%td%"=="!tt!" (endlocal & move /y "%%F" "%dt%\") else endlocal&pause&exit/b
- )
- endlocal&pause&exit/b
复制代码
作者: qixiaobin0715 时间: 2024-9-10 15:37
本帖最后由 qixiaobin0715 于 2024-9-10 16:50 编辑
没看明白第3行是啥意思,好像最终都是else成立。
既然日期字符数有差异,那么就都取8位是否更直接,就不用什么if再else了。
大概看了看,修改时间日期格式后,%date%和文件中(%~tI)的格式同步变化,并无不同,所以不用考虑格式问题,该如何就如何。
作者: aloha20200628 时间: 2024-9-10 18:24
本帖最后由 aloha20200628 于 2024-9-10 18:39 编辑
29楼代码第三行是为兼容系统日期变量 %date% 和 %%~tF 被取值 yyyy*mm*dd 或 yy*mm*dd 两种实况,以便后续的字符串截取偏移量能自适应10位或8位日期值,其实29楼代码还可更简化一步,用 for/f 分割器一气呵成(确保%date%与%%~tF的日期取值方法相同),同时也省略了循环体内的延迟变量... 代码如下
- @echo off &setlocal
- for /f "tokens=1 delims= " %%a in ("%date%") do set "td=%%a"
- cd /d "d:\目标文件夹" &set "dt=d:\目的地文件夹\%td:/=-%"
- md "%dt%" 2>nul
- for /f "delims=" %%F in ('dir /b/tw/o-d') do if "%%~fF" neq "%~f0" (
- for /f "tokens=1 delims= " %%t in ("%%~tF") do if "%td%"=="%%t" (
- move /y "%%F" "%dt%\") else pause&exit/b
- )
- pause&exit/b
复制代码
作者: qixiaobin0715 时间: 2024-9-11 08:33
本帖最后由 qixiaobin0715 于 2024-9-11 08:42 编辑
回复 29# aloha20200628
%td%是经过第2行处理得到的,所以不可能含有空格,那么%td:~8,1%的值也永远不可能是空格,应当是"%date:~8,1%"==" "吧,或者是"%td:~8%"==""。
作者: aloha20200628 时间: 2024-9-11 11:15
本帖最后由 aloha20200628 于 2024-9-11 12:55 编辑
回复 32# qixiaobin0715
一枚手误 阁下真是细心
29楼代码已订正
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |