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

[文件操作] 批处理如何复制目录并移出每个终级目录下的20个文件?

一、情景
1、只终级目录下才有TXT文件
2、每个终级目录下有上百上千上万的文件

二、目的
复制出整个目录树,并且当中的终级目录下还要有20个TXT文件,这20个文本文件是随机性挑选出来的,剪切出来的,而不是复制出来的。

本帖最后由 batman 于 2011-5-28 02:56 编辑

随机很难:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "opath=这里改为你要复制的总目录名"
  3. set "npath=这里改为你要生成的总目录名"
  4. for /r "%opath%" %%a in (*.txt) do (
  5.   if "!%%~pa!" equ "" (
  6.     set /a n=0&set "%%~pa=a"
  7.     set "str=%%~dpa"&set "str=!str:%opath%=%npath%!"
  8.     if not exist "!str!" md "!str!"
  9.     for /f %%b in ('dir "%%~dpa"^|findstr "个文件"') do set "num= "&set /a max=0&call :lp %%b
  10.     for %%b in ("%%~dpa\*.txt") do (
  11.       if !n! neq !max! (
  12.         set /a n+=1
  13.         for %%c in (!num!) do if %%c equ !n! move "%%b" "!str!"
  14.       )
  15.     )
  16.   )
  17. )
  18. goto :eof
  19. :lp
  20. set /a a=!random!%%%1+1
  21. if "%max%" leq "%a%" set /a max=a
  22. if "!num: %a% =!" equ "!num!" set /a n+=1&set "num=!num! %a% "
  23. if "%n%" neq "20" goto lp
  24. set /a n=0
复制代码
***共同提高***

TOP

本帖最后由 batman 于 2011-5-28 02:49 编辑

不随机按默认顺序:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "opath=这里改为你要复制的总目录名"
  3. set "npath=这里改为你要生成的总目录名"
  4. for /r "%opath%" %%a in (*.txt) do (
  5.   if "!%%~pa!" equ "" (
  6.     set "str=%%~dpa"&set "str=!str:%opath%=%npath%!"
  7.     if not exist "!str!" md "!str!"
  8.     set /a n=0&set "%%~pa=a"
  9.     for %%b in ("%%~dpa\*.txt") do if "!n!" neq "20" move "%%b" "!str!"&set /a n+=1
  10.   )
  11. )
复制代码
***共同提高***

TOP

本帖最后由 随风 于 2011-5-28 00:40 编辑

未测试,测试时先做备份。。。
  1. @echo off
  2. set 源总目录绝对路径=
  3. set 新总目录绝对路径=
  4. :loop
  5.    set /a i+=1
  6.    set /a w=!random!%%100000+1
  7.    if defined .%w% set /a i-=1&goto loop
  8.    set n=%n% %w%:
  9.    set .%w%=a
  10.    if %i% lss 20 goto loop
  11. set cd=%cd%
  12. for /r "%源总目录绝对路径%\" %%i in (.) do (
  13.    if exist "%%i\*.txt" (
  14.       cd/d %%i
  15.       dir/b/s "*.txt">tem1
  16.       findstr /n .* tem1>tem2
  17.       for /f "tokens=1* delims=:" %%a in ('findstr /b "%n%" tem2') do (
  18.           set "m=%%~dpb"&set "wj=%%~nxb"
  19.           setlocal enabledelayedexpansion
  20.           set "h=!m:*%源总目录绝对路径%\=!"
  21.           if not exist "%新总目录绝对路径%\!h!" md "%新总目录绝对路径%\!h!"
  22.           move "!m!!wj!" "%新总目录绝对路径%\!h!!wj!"
  23.           endlocal
  24.       )
  25.       cd/d %cd%
  26.     )
  27. )
  28. del /q tem1 tem2
  29. pause
复制代码
技术问题请到论坛发帖求助!

TOP

4# 随风


谢谢,随风,需要测试下。

TOP

复制目录树:
  1. xcopy /t /e 源文件夹 目标文件夹
复制代码
随机很难,真的

TOP

返回列表