Board logo

标题: [文件操作] robocopy代码比较简洁,移动当天文件到当天日期文件夹的的 [打印本页]

作者: onging    时间: 2024-9-13 09:57     标题: robocopy代码比较简洁,移动当天文件到当天日期文件夹的的

  1. robocopy D:\新建文件夹 D:\新建文件夹\%date:~0,4%-%date:~5,2%-%date:~8,2% /mov
复制代码
这段代码比较简洁,移动当天文件到当天日期文件夹的的,缺点是不能移动文件夹,加点什么可以移动文件又可以移动文件夹呢?
作者: aloha20200628    时间: 2024-9-13 10:05

本帖最后由 aloha20200628 于 2024-9-13 10:29 编辑

回复 1# onging

/mov 改为 /move 即可
另建议 ‘目的地文件夹’ 不要在 ‘源文件夹’ 里面...

作者: 77七    时间: 2024-9-13 14:24

1楼的代码并没有限制移动文件的创建或修改时间。


移动创建日期为今天的文件,前贴已经给出
移动修改日期为今天的文件

  1. @echo off
  2. for /f %%a in ('wmic os get localdatetime ^| findstr [0-9]') do (
  3.         set d=%%a
  4. )
  5. robocopy "d:\test" "d:\%d:~0,4%-%d:~4,2%-%d:~6,2%" /s /move /maxage:%d:~0,4%%d:~4,2%%d:~6,2%
  6. pause
复制代码

作者: aloha20200628    时间: 2024-9-13 15:00

本帖最后由 aloha20200628 于 2024-9-13 16:31 编辑

回复 1# onging

看 robocopy 用法细则中有两种移动当日数据的选项,例如》
选项一
  1. robocopy d:\源文件夹 d:\目的地文件夹 /move /maxage:1
复制代码
选项二
  1. robocopy d:\源文件夹 d:\目的地文件夹 /move /maxage:20240913
复制代码
第二选项的当日值可用以下代码获取(无论系统日期值采用 / 或 - 分隔符均予剔除)若确认分隔符是 / 则可删除以下第二行
  1. for /f "tokens=1 delims= " %%a in ("%date:/=%") do set "td=%%a"
  2. set "td=%td:-=%
  3. robocopy d:\源文件夹 d:\目的地文件夹 /move /maxage:%td%
复制代码
若已知系统日期净值为10位(以防有时会被设为后缀星期值),也可以直接从 %date% 截取
  1. set "td=%date:~0,4%%date:~5,2%%date:~8,2%"
  2. robocopy d:\源文件夹 d:\目的地文件夹 /move /maxage:%td%
复制代码

作者: onging    时间: 2024-9-13 17:11

回复 2# aloha20200628
move试过,文件夹依然是不移动的
作者: onging    时间: 2024-9-13 17:35

回复 3# 77七
大佬 们有测试过吗,不起作用的
@echo off
for /f %%a in ('wmic os get localdatetime ^| findstr [0-9]') do (
        set d=%%a
)
robocopy "D:\新建文件夹" "D:\新建文件夹" /s /move /maxage:%d:~0,4%%d:~4,2%%d:~6,2%
pause


作者: onging    时间: 2024-9-13 17:39

回复 4# aloha20200628
大佬们,一条都不起作用呢
作者: zhengzhenhui    时间: 2024-9-13 17:41

文件夹不是当天日期的,但是里面的文件是当天,也不会移动,应用场景感觉移动文件就够用的
作者: zhengzhenhui    时间: 2024-9-13 17:49

  1. @echo off
  2. cd /d "%~dp0"
  3. @REM 把当前目录下 创建日期是今天的文件和文件夹移动到 今天'yyyy-MM-dd'文件夹
  4. set "batchfile=%~f0"
  5. 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"
  6. pause
复制代码
前几天有个帖子和你要求一样,我这边测试可以用,你改一下路径
作者: 77七    时间: 2024-9-13 17:51

回复 6# onging


   源目录和目标目录不能相同。
作者: onging    时间: 2024-9-13 19:02

回复 10# 77七
我的需求是要相同的呀
作者: onging    时间: 2024-9-13 19:52

本帖最后由 onging 于 2024-9-13 20:07 编辑

回复 9# zhengzhenhui
@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
这段路径在那里改
作者: 77七    时间: 2024-9-13 20:51

回复 11# onging


   
你对比着1楼改,也不能改成这样啊 robocopy "D:\新建文件夹" "D:\新建文件夹"

  1. @echo off
  2. for /f %%a in ('wmic os get localdatetime ^| findstr [0-9]') do (
  3. set d=%%a
  4. )
  5. set d1=%d:~0,4%-%d:~4,2%-%d:~6,2%
  6. set d2=%d:~0,4%%d:~4,2%%d:~6,2%
  7. robocopy "d:\新建文件夹" "d:\新建文件夹\%d1%" /s /move /xd "d:\新建文件夹\%d1%" /maxage:%d2%
  8. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2