标题: 如何拷贝所有文件夹中一个最新的文件到其他文件夹?
[打印本页]
作者: chenai79921
时间: 2007-12-19 13:50
标题: 如何拷贝所有文件夹中一个最新的文件到其他文件夹?
例
test文件夹下有若干文件夹 test1 test2 test3 ..等等 这个文件夹中有若干文件,我想把每个文件夹中最新的一个文件拷贝到d盘 请问如何操作谢谢!
作者: chenai79921
时间: 2007-12-19 14:06
在每个文件夹中,都要找该文件夹中最新的文件,并且文件夹名字不给定,否则的话要方便许多了...
[
Last edited by chenai79921 on 2007-12-19 at 02:08 PM ]
作者: chenai79921
时间: 2007-12-19 15:07
现在我把文件夹的名字写进了一个aa.txt,,方便点了,然后怎么写~~
@echo off
dir /ad-r-a-h-s /b>aa.txt
[
Last edited by chenai79921 on 2007-12-19 at 03:12 PM ]
作者: everest79
时间: 2007-12-19 15:53
for /f %a in ('dir /ad /b') do (
pushd "%~dpnxa"
call :scopy
popd
)
goto :eof
:scopy
for /f %i in ("dir /a-d /od") do set scopy="%~dpnxi"
copy %scopy% D:\
作者: chenai79921
时间: 2007-12-19 16:11
能解释下"%~dpnxa" 是什么意思吗? 或者提供相关帮助文档或链接 非常感谢~~
作者: everest79
时间: 2007-12-19 16:16
for /?
作者: chenai79921
时间: 2007-12-19 16:18
不好意思 运行也没有成功
作者: everest79
时间: 2007-12-19 16:30
for /f %%a in ('dir /ad /b') do (
pushd "%%~dpnxa"
call :scopy
popd
)
goto :eof
:scopy
for /f %%i in ("dir /a-d /od") do set scopy="%%~dpnxi"
copy %scopy% D:\
这个批处理要放在你test文件夹下运行
作者: chenai79921
时间: 2007-12-19 16:38
不好意思 前面运行的时候 已经加过%了 ,放在test文件夹下运行 也没有成功
您运行测试过吗?
作者: everest79
时间: 2007-12-19 17:23
for /f %%a in ('dir /ad /b') do (
pushd "%%~dpnxa"
call :scopy
popd
)
goto :eof
:scopy
for /f %%i in ("dir /a-d /od /b") do set scopy="%%~dpnxi"
copy %scopy% D:\
抱歉,口气冲了点,我是少加了一个参数
[
Last edited by everest79 on 2007-12-19 at 05:31 PM ]
作者: chenai79921
时间: 2007-12-19 19:14
饿~~大哥好像又要麻烦你了。。。
运行后提示“系统找不到指定文件”
我看了下命令行后的结果
提示
copy test1\dir d:\
copy test2\dir d:\
系统找不到指定文件
"%%~dpnxi" 这里面的 i 照道理应该是文件夹中最新文件的名字了,,运行出来怎么变成dir了?
[
Last edited by chenai79921 on 2007-12-19 at 07:19 PM ]
作者: chenai79921
时间: 2007-12-19 19:22
知道了
in ("dir /a-d /od /b") 这里应该是单引号饿,呵呵 in ('dir /a-d /od /b')
everest79大哥很热心的,非常感谢啊!
作者: chenai79921
时间: 2007-12-19 20:02
我想把这个BAT文件放在任何地方,,如果test文件夹在f盘下 即 f:\test
那我是不是应该这样改
for /f %%A in ('dir /ad /b F:\test\') do (
pushd "%%~dpnxA"
call :scopy
popd
)
goto :eof
:scopy
for /f %%I in ('dir /a-d /od /b /s F:\test\') do (
set scopy="%%~dpnxI"
copy %scopy% D:\
)
运行之后还是有点问题.........
作者: everest79
时间: 2007-12-20 10:44
for /f "delims=" %%a in ('dir /ad /b /s F:\test') do (
for /f "delims=" %%b in ('dir /a-d /b /s "%%a"') do (
set scopy="%%~dpnxb"
)
call copy %%scopy%% D:\
)
pause
作者: chenai79921
时间: 2007-12-20 15:47
成功了,,再次感谢everest79
作者: whzcy
时间: 2007-12-20 16:34
标题: 高手呀
能不能解释一下每一句的意思呀?
作者: chenai79921
时间: 2007-12-20 16:36
不过就是第2行 ('dir /a-d /b /s "%%a"') 里面要多加个 /od
('dir /a-d /b /s /od "%%a"')这样,,呵呵
作者: chenai79921
时间: 2007-12-20 16:48
第一个for循环找出f:\test\下所有文件夹的名字。/ad 显示目录 /b使用空格式 /s显示文件夹中的文件,,因为这里已经是/AD了所以/S有没有都无所谓,
第二个for循环,第一个for检索出来的文件夹名为%%a,在%%a中搜索文件
/od 为从先到后(修改时间顺序),"%%~dpnxb"该文件夹中文件的绝对路径,其中参数相关说明查看for /?
set scopy="%%~dpnxb" 就是依次把带路径的文件名赋给scopy,按修改时间依次赋给scopy,最后次赋值scopy得到最新的文件,
call copy %%scopy%% D:\ 把找到的文件拷贝到d盘
然后再执行第一个for循环,检索f:\test\下其他文件夹名
for do()里要加call然后再copy,我不知道这是为什么,,望高手指点。