Board logo

标题: [文本处理] 批处理如何批量移动文件到不同目录? [打印本页]

作者: renjie175    时间: 2022-9-12 19:08     标题: 批处理如何批量移动文件到不同目录?

各位大佬,本人因工作需要,需每天家将I:\backup\backup\下的压缩包剪切到i:\对应目录下,我写了个简单的批处理,大概类似于这样:
move I:\Backup\backup\MZP*  I:\MZP  
move I:\Backup\backup\XD9   I:\XD9
move I:\Backup\backup\FLH*   I:\FLH
压缩包名前三位是变量名,和后面的目录名一样。这样做虽然可以达到目的,但每隔几天就会新增这种变量名,这样就导致我要手动编辑这个批处理,要把新增的变量名再新增一条记录,很是麻烦,
所以想着可以写一个批处理可以不用新增就能自动剪切到对应的目录里,但是写了几次都写不好,文件都不知道移动到哪里去,
所以想麻烦站内的大佬帮忙看看哪里是哪里的问题,怎么才能达到我的目的?
  1. @echo off
  2. set /p FilePath=I:\backup\backup\:
  3. cd /d %FilePath%
  4. for /f "tokens=1,* delims=D" %%J in ('dir /b *.*') do (
  5.     if not exist "%%J" md "I:\%%J"
  6.     move /-y "I:\backup\backup\%%JD%%K" "I:\%%J"
  7.     )
  8. pause >nul
  9. exit
  10. :GTNO
  11. exit
复制代码

作者: Batcher    时间: 2022-9-12 22:59

回复 1# renjie175


请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "FilePath=I:\backup\backup"
  4. if not exist "%FilePath%" (
  5.     echo 未找到文件夹
  6.     pause
  7.     goto :eof
  8. )
  9. cd /d "%FilePath%"
  10. for /f "delims=" %%j in ('dir /b /a-d ^| findstr /v /x "%~nx0"') do (
  11.     set "FileName=%%j"
  12.     if not exist "I:\!FileName:~0,3!" (
  13.         md "I:\!FileName:~0,3!"
  14.         move /-y "%FilePath%\!FileName!" "I:\!FileName:~0,3!"
  15.     )
  16. )
  17. pause
复制代码

作者: renjie175    时间: 2022-9-13 09:22

回复 2# Batcher


    非常感谢您的解答,执行您给了命令后,确实可以达到我的目的。但是新的问题又产生的,您的命令只在 i:\根目录下没有要移动的目录名时,该命令才会生效。我测试过了两次,I:\Backup\backup目录下69个ZIP压缩包在 i:\根目录下没有对应目录时就能成功,成功一次后,I:\Backup\backup产生新的文件名不同的压缩包,再执行时就没有反应了。
可能是我没有说清楚,要移动的文件完整文件名为:XXXD年月日.zip,其中XXX是代码名,是变量,年月日也是变量,D为第四位,是固定不变的。例如:MZPD220831.ZIP,XD9D220901.ZIP,这个目录下的压缩包就像日志那样会定期生成,我需要定期将指定日期移动到i:\下对应的目录下,方便程序打开查看。

第二个问题是,测试了两次,发现FUDD220831.ZIP,这个文件名移动不成功,文件仍存在。可能是因为FUD和第四位D是相同的原因吧。不知这个有什么好的解决办法,之前的命令也遇到类似问题。

第三个问题,我想上传图片或附件,可是总是提示失败,无论什么格式都失败,大小为41kb。

还请赐教
作者: renjie175    时间: 2022-9-13 09:27

回复 2# Batcher


    应该可以设置在i:\根目录下已有要移动的目录的情况下强行移动吧
作者: qixiaobin0715    时间: 2022-9-13 09:33

2楼代码第14行移到15行下面试试。
作者: Batcher    时间: 2022-9-13 10:19

回复 3# renjie175


如果需要上传文件,可以用阿里云盘或百度网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: Batcher    时间: 2022-9-13 10:20

回复 4# renjie175
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "FilePath=I:\backup\backup"
  4. if not exist "%FilePath%" (
  5.     echo 未找到文件夹
  6.     pause
  7.     goto :eof
  8. )
  9. cd /d "%FilePath%"
  10. for /f "delims=" %%j in ('dir /b /a-d ^| findstr /v /x "%~nx0"') do (
  11.     set "FileName=%%j"
  12.     if not exist "I:\!FileName:~0,3!" (
  13.         md "I:\!FileName:~0,3!"
  14.     )
  15.     move /-y "%FilePath%\!FileName!" "I:\!FileName:~0,3!"
  16. )
  17. pause
复制代码

作者: renjie175    时间: 2022-9-13 10:32

回复 7# Batcher


    非常感谢。测试了两次,完美解决!
作者: renjie175    时间: 2022-9-13 10:33

回复 5# qixiaobin0715


  嗯嗯,可以了。




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