[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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中全部文件)

能否给出移动前和移动后的目录结构分布是什么样子的?就用tree /f命令就行了

TOP

顶楼P并不仅仅是移动文件到"根目录"的。

按楼主现在的要求,P放到e:\a目录下运行,不需要改。。。

TOP

一般可以这样:
  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\"
复制代码

TOP

回复 3# apang


    嗯,这点没错,但我要处理的并不光是a文件夹,还有aa、aaa...

TOP

回复 4# CrLf


    感谢指教,可a、b、c只是举例子,因为文件夹时常变换(下载文件夹,总有不少包含很多子文件夹的文件夹,所以名称不固定),所以不能指定绝对路径...

TOP

本帖最后由 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
复制代码

TOP

回复 6# comicguests


    文字描述不清,请用tree /f给出目录结构
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 7# FOR


    感谢回复,但一闪而过...我是win7旗舰32位...

TOP

回复 8# Batcher


    语文学的不是很好,见谅...
大概是e:\*\*\*,将后两个*里的内容移动到e:\*里

TOP

回复 10# comicguests


    你是不知道如何使用tree /f命令?还是不愿意用?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 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
复制代码

TOP

回复 11# Batcher


    惭愧,我连菜鸟都算不上...十分抱歉

TOP

回复 12# FOR

感谢,的确是按照我的想法执行的!!
可运行之后才发现,我的想法有个漏洞,我的下载文件夹为F:\download\,当我在F:\download中运行批处理后,F:\download中子文件夹里的内容都移到F:\download里了...
可不可以把批处理所在文件夹当做第一文件夹,
第一文件夹(批处理所在)\第二文件夹\第三文件夹\...
将第三文件夹里的全部内容移到第二文件夹中?
思维出现这么大漏洞真是对不起....

TOP

回复 13# comicguests


比如,你要查看C:\test的目录结构:
开始
运行
cmd
tree /f "C:\test"

TOP

返回列表