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

[文件操作] 批处理怎样移动文件到第一层文件夹?

[复制链接]
发表于 2012-6-27 19:48:59 | 显示全部楼层 |阅读模式
本帖最后由 comicguests 于 2012-6-27 15:13 编辑

下面的代码能移动文件到根目录,但我想移动到第一层文件夹...应该如何修改呢?
感谢关注!!
  1. @echo off
  2. echo 移动文件中...
  3. for /f "delims=" %%i in ('dir *.* /a-d /s /b') do (
  4.     if not "%%~dpi"=="%~dp0" call :movefile "%%i"
  5. )
  6. echo 移动文件完成!
  7. exit
  8. :movefile
  9. if exist "%~dp0%~nx1" set "n="&goto renfile
  10. move %1 "%~dp0">nul 2>nul||(attrib -r -h -s %1& move %1 "%~dp0">nul)
  11. goto :eof
  12. :renfile
  13. set/a n+=1
  14. if exist "%~dp0%~n1(%n%)%~x1" goto renfile
  15. move %1 "%~dp0%~n1(%n%)%~x1">nul 2>nul||(
  16. attrib -r -h -s %1& move %1 "%~dp0%~n1(%n%)%~x1">nul)
  17. goto :eof
复制代码
嗯,1楼所言甚是,那么,将e:\a\b\c\*里的文件,全移到e:\a里(包含b、c中全部文件)
发表于 2012-6-27 22:04:32 | 显示全部楼层
能否给出移动前和移动后的目录结构分布是什么样子的?就用tree /f命令就行了
发表于 2012-6-27 22:32:09 | 显示全部楼层
顶楼P并不仅仅是移动文件到"根目录"的。

按楼主现在的要求,P放到e:\a目录下运行,不需要改。。。
发表于 2012-6-27 23:22:47 | 显示全部楼层
一般可以这样:
  1. for /r "e:\a\b\c" in (*) do move /y "%%a" "e:\a"
复制代码
或者试试地图炮:
  1. for /r "e:\a\b\c" in (.) do move /y "%%a\*.*" "e:\a"
复制代码
 楼主| 发表于 2012-6-28 17:29:54 | 显示全部楼层
回复 3# apang


    嗯,这点没错,但我要处理的并不光是a文件夹,还有aa、aaa...
 楼主| 发表于 2012-6-28 17:33:44 | 显示全部楼层
回复 4# CrLf


    感谢指教,可a、b、c只是举例子,因为文件夹时常变换(下载文件夹,总有不少包含很多子文件夹的文件夹,所以名称不固定),所以不能指定绝对路径...
发表于 2012-6-28 18:11:32 | 显示全部楼层
本帖最后由 FOR 于 2012-6-29 21:14 编辑

遇同名文件跳过
  1. @echo off
  2. for /f "delims=" %%I in ('dir/b/s/a-d') do (
  3.         for /f "tokens=1,2* delims=" %%a in ("%%~dpI") do (
  4.                 if not "%%c"=="" (
  5.                         if not exist "%%a\%%b\%%~nxI" move "%%I" "%%a\%%b"
  6.                 )
  7.         )
  8. )
  9. pause
复制代码
发表于 2012-6-28 18:22:19 | 显示全部楼层
回复 6# comicguests


    文字描述不清,请用tree /f给出目录结构
 楼主| 发表于 2012-6-29 16:32:31 | 显示全部楼层
回复 7# FOR


    感谢回复,但一闪而过...我是win7旗舰32位...
 楼主| 发表于 2012-6-29 16:35:57 | 显示全部楼层
回复 8# Batcher


    语文学的不是很好,见谅...
大概是e:\*\*\*,将后两个*里的内容移动到e:\*里
发表于 2012-6-29 17:19:25 | 显示全部楼层
回复 10# comicguests


    你是不知道如何使用tree /f命令?还是不愿意用?
发表于 2012-6-29 21:13:09 | 显示全部楼层
回复 9# comicguests

笔误,漏写了一个 % 号
  1. @echo off
  2. for /f "delims=" %%I in ('dir/b/s/a-d') do (
  3.         for /f "tokens=1,2* delims=" %%a in ("%%~dpI") do (
  4.                 if not "%%c"=="" (
  5.                         if not exist "%%a\%%b\%%~nxI" move "%%I" "%%a\%%b"
  6.                 )
  7.         )
  8. )
  9. pause
复制代码
 楼主| 发表于 2012-6-30 13:27:17 | 显示全部楼层
回复 11# Batcher


    惭愧,我连菜鸟都算不上...十分抱歉
 楼主| 发表于 2012-6-30 13:35:02 | 显示全部楼层
回复 12# FOR

感谢,的确是按照我的想法执行的!!
可运行之后才发现,我的想法有个漏洞,我的下载文件夹为F:\download\,当我在F:\download中运行批处理后,F:\download中子文件夹里的内容都移到F:\download里了...
可不可以把批处理所在文件夹当做第一文件夹,
第一文件夹(批处理所在)\第二文件夹\第三文件夹\...
将第三文件夹里的全部内容移到第二文件夹中?
思维出现这么大漏洞真是对不起....
发表于 2012-6-30 16:23:15 | 显示全部楼层
回复 13# comicguests


比如,你要查看C:\test的目录结构:
开始
运行
cmd
tree /f "C:\test"
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 06:16 , Processed in 0.022033 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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