返回列表 发帖

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

本帖最后由 comicguests 于 2012-6-27 15:13 编辑

下面的代码能移动文件到根目录,但我想移动到第一层文件夹...应该如何修改呢?
感谢关注!!
@echo off
echo 移动文件中...
for /f "delims=" %%i in ('dir *.* /a-d /s /b') do (
    if not "%%~dpi"=="%~dp0" call :movefile "%%i"
)
echo 移动文件完成!
exit
:movefile
if exist "%~dp0%~nx1" set "n="&goto renfile
move %1 "%~dp0">nul 2>nul||(attrib -r -h -s %1& move %1 "%~dp0">nul)
goto :eof
:renfile
set/a n+=1
if exist "%~dp0%~n1(%n%)%~x1" goto renfile
move %1 "%~dp0%~n1(%n%)%~x1">nul 2>nul||(
attrib -r -h -s %1& move %1 "%~dp0%~n1(%n%)%~x1">nul)
goto :eofCOPY
嗯,1楼所言甚是,那么,将e:\a\b\c\*里的文件,全移到e:\a里(包含b、c中全部文件)

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

TOP

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

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

TOP

一般可以这样:
for /r "e:\a\b\c\" in (*) do move /y "%%a" "e:\a\"COPY
或者试试地图炮:
for /r "e:\a\b\c\" in (.) do move /y "%%a\*.*" "e:\a\"COPY

TOP

回复 3# apang


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

TOP

回复 4# CrLf


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

TOP

本帖最后由 FOR 于 2012-6-29 21:14 编辑

遇同名文件跳过
@echo off
for /f "delims=" %%I in ('dir/b/s/a-d') do (
for /f "tokens=1,2* delims=\" %%a in ("%%~dpI") do (
if not "%%c"=="" (
if not exist "%%a\%%b\%%~nxI" move "%%I" "%%a\%%b"
)
)
)
pauseCOPY

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

笔误,漏写了一个 % 号
@echo off
for /f "delims=" %%I in ('dir/b/s/a-d') do (
        for /f "tokens=1,2* delims=\" %%a in ("%%~dpI") do (
                if not "%%c"=="" (
                        if not exist "%%a\%%b\%%~nxI" move "%%I" "%%a\%%b"
                )
        )
)
pauseCOPY

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

返回列表