标题: [文件操作] 批处理如何复制目录并移出每个终级目录下的20个文件? [打印本页]
作者: regabc 时间: 2011-5-27 23:04 标题: 批处理如何复制目录并移出每个终级目录下的20个文件?
一、情景
1、只终级目录下才有TXT文件
2、每个终级目录下有上百上千上万的文件
二、目的
复制出整个目录树,并且当中的终级目录下还要有20个TXT文件,这20个文本文件是随机性挑选出来的,剪切出来的,而不是复制出来的。
作者: batman 时间: 2011-5-28 00:24
本帖最后由 batman 于 2011-5-28 02:56 编辑
随机很难:- @echo off&setlocal enabledelayedexpansion
- set "opath=这里改为你要复制的总目录名"
- set "npath=这里改为你要生成的总目录名"
- for /r "%opath%" %%a in (*.txt) do (
- if "!%%~pa!" equ "" (
- set /a n=0&set "%%~pa=a"
- set "str=%%~dpa"&set "str=!str:%opath%=%npath%!"
- if not exist "!str!" md "!str!"
- for /f %%b in ('dir "%%~dpa"^|findstr "个文件"') do set "num= "&set /a max=0&call :lp %%b
- for %%b in ("%%~dpa\*.txt") do (
- if !n! neq !max! (
- set /a n+=1
- for %%c in (!num!) do if %%c equ !n! move "%%b" "!str!"
- )
- )
- )
- )
- goto :eof
- :lp
- set /a a=!random!%%%1+1
- if "%max%" leq "%a%" set /a max=a
- if "!num: %a% =!" equ "!num!" set /a n+=1&set "num=!num! %a% "
- if "%n%" neq "20" goto lp
- set /a n=0
复制代码
作者: batman 时间: 2011-5-28 00:29
本帖最后由 batman 于 2011-5-28 02:49 编辑
不随机按默认顺序:- @echo off&setlocal enabledelayedexpansion
- set "opath=这里改为你要复制的总目录名"
- set "npath=这里改为你要生成的总目录名"
- for /r "%opath%" %%a in (*.txt) do (
- if "!%%~pa!" equ "" (
- set "str=%%~dpa"&set "str=!str:%opath%=%npath%!"
- if not exist "!str!" md "!str!"
- set /a n=0&set "%%~pa=a"
- for %%b in ("%%~dpa\*.txt") do if "!n!" neq "20" move "%%b" "!str!"&set /a n+=1
- )
- )
复制代码
作者: 随风 时间: 2011-5-28 00:36
本帖最后由 随风 于 2011-5-28 00:40 编辑
未测试,测试时先做备份。。。- @echo off
- set 源总目录绝对路径=
- set 新总目录绝对路径=
- :loop
- set /a i+=1
- set /a w=!random!%%100000+1
- if defined .%w% set /a i-=1&goto loop
- set n=%n% %w%:
- set .%w%=a
- if %i% lss 20 goto loop
- set cd=%cd%
-
- for /r "%源总目录绝对路径%\" %%i in (.) do (
- if exist "%%i\*.txt" (
- cd/d %%i
- dir/b/s "*.txt">tem1
- findstr /n .* tem1>tem2
- for /f "tokens=1* delims=:" %%a in ('findstr /b "%n%" tem2') do (
- set "m=%%~dpb"&set "wj=%%~nxb"
- setlocal enabledelayedexpansion
- set "h=!m:*%源总目录绝对路径%\=!"
- if not exist "%新总目录绝对路径%\!h!" md "%新总目录绝对路径%\!h!"
- move "!m!!wj!" "%新总目录绝对路径%\!h!!wj!"
- endlocal
- )
- cd/d %cd%
- )
- )
- del /q tem1 tem2
- pause
复制代码
作者: regabc 时间: 2011-5-28 00:43
4# 随风
谢谢,随风,需要测试下。
作者: CrLf 时间: 2011-5-28 11:48
复制目录树:复制代码
随机很难,真的
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |