Board logo

标题: [文本处理] [已解决]批处理如何在多个文件夹下提取最新生成的文件? [打印本页]

作者: haichuan5121    时间: 2014-12-22 00:43     标题: [已解决]批处理如何在多个文件夹下提取最新生成的文件?

多个文件夹下有N个文件夹,怎么从这些文件夹下提取最新生成的一个文件啊。csv格式文件!
作者: 慕夜蓝化    时间: 2014-12-22 11:37

怎么个提取
作者: terse    时间: 2014-12-22 22:50

  1. @echo off
  2. for /f "delims=" %%i in ('dir /a-d /b/s/o-d *.csv') do set var=%%i&&goto next
  3. :next
  4. echo   "%var%"
  5. pause
复制代码

作者: haichuan5121    时间: 2014-12-25 11:26

比如在11文件夹下有1,2,3,4,5,6,7,8,9,   9个文件夹 每个文件夹都会不定时更新一些CSV文件;怎么才能时时提取这些子文件夹下面最新的一个CSV文件(每个文件夹下面提取一个)汇总成一个新的文件夹另存啊;
作者: haichuan5121    时间: 2014-12-25 16:34

回复 2# 慕夜蓝化


   
比如在11文件夹下有1,2,3,4,5,6,7,8,9,   9个文件夹 每个文件夹都会不定时更新一些CSV文件;怎么才能时时提取这些子文件夹下面最新的一个CSV文件(每个文件夹下面提取一个)汇总成一个新的文件夹另存啊;
作者: haichuan5121    时间: 2014-12-25 17:11

@echo off
set rar="C:\Program Files\WinRAR\rar.exe"
set archive=all.rar
for /d /r E:\ %%a in (*) do set "fo=%%a" & call :latest
echo/&pause&exit/b
:latest
for /f "eol=| delims=" %%a in ('dir /a-d /b /o-d /tw "%fo%" 2^>nul') do %rar% a %archive% "%fo%\%%a"&goto :eof
这个是坛子里搜的一个代码;能提取但是它这个把提取后的内容打包了,如果不需要打包怎么改啊?
提取出来的文件能不能按文件夹的名字命名啊!比如1里面提取出来的就叫1.csv。。。
即9个文件夹提取出9个最新的CSV文件跟文件夹名字一致分别叫1.csv.2.csv。。。放在自动建立的New文件夹里;
作者: haichuan5121    时间: 2014-12-26 11:03

得罪大神们了么。大锅大姐们给帮帮忙撒!
作者: DAIC    时间: 2014-12-26 11:22

回复 6# haichuan5121


    你确定这个代码能搜出每个文件夹下的最新文件?我看代码里面应该没这个功能吧
作者: haichuan5121    时间: 2014-12-26 11:25

回复 8# DAIC


    我运行了一下,每个文件夹下确实提取了一个出来,而且还打包了。是不是最新的没注意。。。。也是临时抱佛脚网上搜的代码。。。
作者: haichuan5121    时间: 2014-12-26 11:32

回复 8# DAIC


    刚确认了下我提取的确实是最新的;
作者: DAIC    时间: 2014-12-26 12:39

回复 10# haichuan5121


    确实是的,刚才没看清楚。
作者: DAIC    时间: 2014-12-26 12:40

回复 6# haichuan5121


帮你把打包的功能去掉了
  1. @echo off
  2. set "NewFolder=D:\新文件夹"
  3. if not exist "%NewFolder%\" (
  4.     md "%NewFolder%"
  5. )
  6. for /d /r E:\ %%a in (*) do (
  7.     call :latest "%%a"
  8. )
  9. pause
  10. goto :eof
  11. :latest
  12. for /f "delims=" %%a in ('dir /a-d /b /o-d /tw "%~1" 2^>nul') do (
  13.     copy /y "%~1\%%a" "%NewFolder%"
  14.     goto :eof
  15. )
复制代码

作者: haichuan5121    时间: 2014-12-26 12:56

回复 12# DAIC


    多谢大哥了,非常完美谢了!!!
作者: 慕夜蓝化    时间: 2014-12-26 14:38

@echo off
setlocal enabledelayedexpansion
md 新生 >nul 2>nul
for /f "delims=" %%i in ('dir /b/l/ad') do (
    call :a "%%~dpnxi"
    set "n="
)
pause&exit

:a
echo,-------------------------------------&echo,%~1
for /f "tokens=*" %%a in ('dir /s/b/l/aa/o-d "%~1\*mp3"') do (
    set /a n+=1
    if !n! equ 1 move /y "%%~a" "新生\"
)
goto :eof
也许晚了一些,其实在这之前写过一个显示当前目录以及子目录下所有最新生成的文件的脚本。
不过一个是显示,一个是提取吧,还有这里的提取是移动,如果不想移动,那么将参数中move改为copy即可。
希望对你有用。
作者: DAIC    时间: 2014-12-26 14:45

回复 14# 慕夜蓝化


dir 命令的 /l 是多余的吧?
%%~dpnxi 是不是可以简写成 %%~fi 呢?
作者: 慕夜蓝化    时间: 2014-12-26 15:07

回复 15# DAIC
嗯,/l参数是一个输出为小写的开关,还有那个%%~dpnxi,确实可以写成%%~fi,因为某些时候习惯的原因,会将一些不必要的参数代入进来,以后我会简写的,谢谢指点。>_<
作者: yiwuyun    时间: 2014-12-26 20:08

如果目录层次超过三层,并且在每个文件夹下同一分钟之内生成两个以上的文件,尚不能实现要求吧。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2