标题: [文件操作] 批处理怎样移动文件到第一层文件夹? [打印本页]
作者: comicguests 时间: 2012-6-27 19:48 标题: 批处理怎样移动文件到第一层文件夹?
本帖最后由 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 :eof
复制代码
嗯,1楼所言甚是,那么,将e:\a\b\c\*里的文件,全移到e:\a里(包含b、c中全部文件)
作者: forfiles 时间: 2012-6-27 22:04
能否给出移动前和移动后的目录结构分布是什么样子的?就用tree /f命令就行了
作者: apang 时间: 2012-6-27 22:32
顶楼P并不仅仅是移动文件到"根目录"的。
按楼主现在的要求,P放到e:\a目录下运行,不需要改。。。
作者: CrLf 时间: 2012-6-27 23:22
一般可以这样:- for /r "e:\a\b\c\" in (*) do move /y "%%a" "e:\a\"
复制代码
或者试试地图炮:- for /r "e:\a\b\c\" in (.) do move /y "%%a\*.*" "e:\a\"
复制代码
作者: comicguests 时间: 2012-6-28 17:29
回复 3# apang
嗯,这点没错,但我要处理的并不光是a文件夹,还有aa、aaa...
作者: comicguests 时间: 2012-6-28 17:33
回复 4# CrLf
感谢指教,可a、b、c只是举例子,因为文件夹时常变换(下载文件夹,总有不少包含很多子文件夹的文件夹,所以名称不固定),所以不能指定绝对路径...
作者: FOR 时间: 2012-6-28 18:11
本帖最后由 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"
- )
- )
- )
- pause
复制代码
作者: Batcher 时间: 2012-6-28 18:22
回复 6# comicguests
文字描述不清,请用tree /f给出目录结构
作者: comicguests 时间: 2012-6-29 16:32
回复 7# FOR
感谢回复,但一闪而过...我是win7旗舰32位...
作者: comicguests 时间: 2012-6-29 16:35
回复 8# Batcher
语文学的不是很好,见谅...
大概是e:\*\*\*,将后两个*里的内容移动到e:\*里
作者: Batcher 时间: 2012-6-29 17:19
回复 10# comicguests
你是不知道如何使用tree /f命令?还是不愿意用?
作者: FOR 时间: 2012-6-29 21:13
回复 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"
- )
- )
- )
- pause
复制代码
作者: comicguests 时间: 2012-6-30 13:27
回复 11# Batcher
惭愧,我连菜鸟都算不上...十分抱歉
作者: comicguests 时间: 2012-6-30 13:35
回复 12# FOR
感谢,的确是按照我的想法执行的!!
可运行之后才发现,我的想法有个漏洞,我的下载文件夹为F:\download\,当我在F:\download中运行批处理后,F:\download中子文件夹里的内容都移到F:\download里了...
可不可以把批处理所在文件夹当做第一文件夹,
第一文件夹(批处理所在)\第二文件夹\第三文件夹\...
将第三文件夹里的全部内容移到第二文件夹中?
思维出现这么大漏洞真是对不起....
作者: forfiles 时间: 2012-6-30 16:23
回复 13# comicguests
比如,你要查看C:\test的目录结构:
开始
运行
cmd
tree /f "C:\test"
作者: comicguests 时间: 2012-6-30 18:49
回复 15# forfiles
试了一下,原来是这样,感谢!!
作者: FOR 时间: 2012-6-30 19:53
本帖最后由 FOR 于 2012-7-3 01:43 编辑
- @echo off
- for /f "delims=" %%i in ('dir/b/s/a-d') do (
- set "str=%%i"
- setlocal enabledelayedexpansion
- set "str=!str:*%cd%=!"
- for /f "tokens=1 delims=\" %%a in ("!str!") do (
- if not "%%i"=="!cd!\%%~nxi" move "%%i" "!cd!\%%a"
- )
- endlocal
- )
- pause
复制代码
作者: comicguests 时间: 2012-7-2 20:54
回复 17# FOR - 移动了 1 个文件。
- 移动了 1 个文件。
- 移动了 1 个文件。
- 移动了 1 个文件。
- 移动了 1 个文件。
- 移动了 1 个文件。
- 移动了 1 个文件。
- 移动了 1 个文件。
- 移动了 1 个文件。
- 移动了 1 个文件。
- 移动了 1 个文件。
- 请按任意键继续. . .
复制代码
运行后显示以上内容,但文件实际未移动...
但感谢帮助!!
作者: FOR 时间: 2012-7-3 01:42
多打了个括弧,你那里没提示“以达到最大递归层”吗?- @echo off
- for /f "delims=" %%i in ('dir/b/s/a-d') do (
- set "str=%%i"
- setlocal enabledelayedexpansion
- set "str=!str:*%cd%=!"
- for /f "tokens=1 delims=\" %%a in ("!str!") do (
- if not "%%i"=="!cd!\%%~nxi" move "%%i" "!cd!\%%a"
- )
- endlocal
- )
- pause
复制代码
作者: comicguests 时间: 2012-7-3 12:19
回复 19# FOR
没有,试了一下,还是不行...
作者: powerbat 时间: 2012-7-3 12:36
回复 13# comicguests
无语,没见过这么执拗的人。
作者: powerbat 时间: 2012-7-3 13:38
- @echo off
- for /f "delims=" %%i in ('dir /a-d/b/s') do move "%%a"
- pause
复制代码
作者: FOR 时间: 2012-7-3 22:08
19楼代码我实际测试是成功的。
作者: FOR 时间: 2012-7-3 22:19
再试试这个- @echo off&set /a n=1
- call :Loop "%cd%"
- :loop
- for /f "tokens=1* delims=\" %%i in ("%~1") do (
- set /a n+=1
- if not "%%j"=="" call :Loop "%%j"
- )
- for /f "delims=" %%I in ('dir/b/s/a-d') do (
- for /f "tokens=%n%* delims=\" %%a in ("%%I") do (
- if not "%%b"=="" move "%%I" "%cd%\%%a"
- )
- )
- pause
复制代码
作者: comicguests 时间: 2012-7-4 10:28
回复 22# powerbat - 系统找不到指定的文件。
- 系统找不到指定的文件。
- 系统找不到指定的文件。
- 系统找不到指定的文件。
- 系统找不到指定的文件。
- 系统找不到指定的文件。
- 系统找不到指定的文件。
- 系统找不到指定的文件。
- 系统找不到指定的文件。
- 系统找不到指定的文件。
- 系统找不到指定的文件。
- 系统找不到指定的文件。
- 系统找不到指定的文件。
- 系统找不到指定的文件。
- 系统找不到指定的文件。
- 请按任意键继续. . .
复制代码
汇报结果!
执拗么...我倒是感觉自己性格不好...
作者: comicguests 时间: 2012-7-4 10:32
回复 24# FOR
多次劳烦您,真是十分感谢,但还是只显示移动,但没有移动...是我系统问题么?
win732位旗舰版
ps:实在不行就只能放弃了...
作者: FOR 时间: 2012-7-4 12:51
本帖最后由 FOR 于 2012-7-4 12:53 编辑
我也是 win7 32位旗舰版
19、24楼的代码我这里都能成功
12楼的代码能正常运行,怎么24楼的就会不行呢??
作者: comicguests 时间: 2012-7-5 11:45
所以我就怀疑是不是系统的个别差异...
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |