打印

[原创] 又一个无聊的脚本,呵呵

又一个无聊的脚本,呵呵

脚本的作用是把一个文件夹下的文本文件合成一个
5 X; u' |6 G3 M% j; D这个小东西的起因是我收集的一些技术资料,非常零散,个个不大,1K多点,有些甚至只有几行字1 L0 ^; C7 i+ q- y; _* }7 I
想把它们拼成一个文件,之间用分隔线隔开2 D0 Z+ g+ M& ]$ d) B- t! Y
写了好久,也知道了一点,脚本虽然功能比批处理强大,但有些时候,真的不如批处理来得方便1 V _; Q$ d9 Y( y) \1 @
下午我再试写一下批处理版的/ n, s% {7 [9 s, P& l
6 V! n) n( w! j0 L, Y2 T! D8 i
##############################################################+ ~# Q4 F, C# Z4 G0 I( e6 M
7 e4 w5 _& z0 i( X, n
var fso, wshshell, fld, fls, path, file, all;
) ]9 L/ b: H! c7 y2 p0 F0 v0 E) e3 e" _; h# H- C' R0 a
fso = new ActiveXObject("Scripting.FileSystemObject"); //新建一个文件处理对像,用来处理文件2 Y$ ?* h9 ^. N4 R0 {% C; [5 T
wshshell = WScript.CreateObject("WScript.shell");//建一个SHELL对象,用来最后执行写好的批处理,没办法,copyfile命令似乎不能合并文件) ~& v9 k& @+ }- m- `* i. a
 path = WScript.arguments(0); //获取第一个参数. |3 O3 |* s8 t; E5 J7 _
 fld = fso.GetFolder(path);//获取参数传递的文件夹
" G$ V% |! d; K4 h8 W fls = new Enumerator(fld.files); //获取文件夹中的文件列表集合
9 j; ~( d3 p# E' C. `$ `var backup; //因为会对每个文件进行处理,所以先做好备份
* Z5 \" E* t9 F backup = fso.CreateFolder(path+"[url=file://\\backup]\\backup[/url]");
- F! K9 `6 G! k! o8 K fso.CopyFile(path+"\\*.*", backup);+ |: f! W [! y0 o* n# f, B

/ v# s6 e6 p3 V1 P/ H$ y5 ~
/ o. ?9 v# c% n. o# V for (;!fls.atEnd();fls.moveNext()) //给每一个文件后面加上分隔线& B( u( h, B( w
{. K" L5 c Z# F6 w
 file = fso.OpenTextFile(fls.item(),8);' G8 _( k, y* S( T. k9 {$ J
 file.Writeline();
/ P5 [3 V' M. e file.Writeline();% j6 O2 m. h- l" b2 P" C
for(n=0; n<20; n++)' ~2 F f: P7 t- U1 A6 N8 g
{
/ R1 t, i: ]( h9 N. O file.Write("# # # # ");
( J6 {) s5 H1 z3 x( P0 Y1 J3 c}( x+ q: i: c0 M
 file.Writeline();
1 v) q, d1 o( |0 Y file.Writeline();3 s5 ^. I4 _( ]% W
file.Close();
6 M+ Y/ @7 X0 E* o! F! x4 O }
. F f2 Y' x p& |$ j$ Tfile = path+"\*.txt"; //编写批处理,用copy命令将所有TXT文件合成一个
5 H+ R0 o0 l6 m( l) V9 N3 a3 qall = path + "\all.txt";6 v( E \" X2 [
 ok= fso.CreateTextFile("c:\\ok.bat");0 f U6 i( Z- `* @& o
 ok.Write ("copy ");+ V# D" u" g4 q; @9 y3 c4 P2 j9 Q
 ok.Write(file); Y! G9 d! H. D# i0 h5 D
 ok.Write(" ");
q. W$ w; b! S( q! ? ok.Write(all);
" J/ R& m: I5 N0 w: ~1 u ok.WriteLine();5 h9 }6 O6 Q1 V' ]8 M/ j
 ok.WriteLine("del c:\\ok.bat");
6 o7 h* k# {6 V/ g, L" T- P ok.Close();
* Z% i4 j& Z; v5 G1 a( [wshshell.run ("c:\\ok.bat");//执行写好的批处理
- L. v, Z8 W% Z0 H1 J! a; `" G/ _: N1 q) u
[ 本帖最后由 北羊 于 2007-11-30 00:38 编辑 ]
考完试鸟,心力憔悴呀~~~~接下来,准备补考

TOP

这个可不算是无聊啊,挺实用的。
& b* r% y0 g0 s. _5 b% f# N/ {" A, j( q% e8 r/ [0 S
以前已作过一个,不过随着一个linux的安装而消失了。

TOP

我刚开始学这方面的知识,请问一问题,为什么取20.为什么不取30或40呢?或者取小点的数呢...

TOP

引用:
原帖由 gy2008 于 2007-11-14 17:35 发表
/ e8 g: _: x! n我刚开始学这方面的知识,请问一问题,为什么取20.为什么不取30或40呢?或者取小点的数呢...
7 f* x( @" _6 u3 e8 F$ w6 { ]; S7 o$ D7 ~6 J' a0 [7 J. H! X
这个随便,20是因为我试过了,八个字符(#和空格各四个)重复二十次刚好能达到屏幕上1280的长度,如果你的显示器是宽屏,可能还要再宽点,如果显示器是十五的,那可能重复十次就可以了,呵呵,甚至,如果你喜欢,可以直接写入一行,这里我只是想用一下FOR循环而已,不要想得太复杂了
考完试鸟,心力憔悴呀~~~~接下来,准备补考

TOP

批处理版的,

@echo off- U, O9 _8 Y4 v7 W( J9 J8 n$ M
cls: C* l' d; w) R3 F/ C3 J
title www.sharecenter.net
S0 n3 _0 f) a% A% Ucolor E0$ }4 K( D% I A
echo 1 b y, \' ^% i% a% e. L" q' O7 R
3 \9 `$ J2 |- i1 y; f% U; A, p
===========================================================
. Y/ P8 h# Q9 l- e( N& e6 V2 G
4 T$ u+ z% d2 h& G- A7 e7 Q/ K) m, l$ E=======
; ^ F m2 u7 d* z% e; F0 H9 ~+ Wecho www.sharecenter.net
0 y4 R. O) C: T+ b/ eecho 脚本天堂+ H I& Q; }7 l; D& l' F
echo
% m5 F% k% Q4 ]/ E. w/ h/ S# Y2 i# ^6 [ l
===========================================================
2 Y: B; v: l. o. u% t2 F3 q
3 O3 r# J1 r9 }1 t2 n$ {======= | M. F( h, h
echo.3 S- \1 w- T7 N/ J2 r5 h
echo 本批处理程序将把%1下的TXT文件合并成一个大的TXT文件6 h4 d4 \. }; l
echo. _$ M( p& g, O D: w$ B
echo ☆☆☆注意☆☆☆:本程序不能处理带空格的文件名. w/ { \$ A, P }8 W7 M* ~ I
echo.0 i P& ~! U. s7 r
set /p choice= 按Y(大写)确定继续,回车退出…… q; Z( ]2 z5 P2 l% B
if %choice% == Y goto unite6 Q$ l% {1 i! y# ?
goto nounite% z' y! j. ?8 I* F ^ `

0 D9 K7 h; H- |5 M% y1 P0 ?:unite
( l. w( A; K2 H( k& ]0 I0 {0 n9 h3 Iecho.
Z( P( z/ f+ a' N m4 a) U, K3 _echo.
( w, U" U& i- \echo.
, R6 b( `7 t* P
- N& b; r; g) nmd %1\backup5 o4 e2 L$ V/ p
copy %1\*.* %1\backup\
. _0 E& p* Z# `( D. @# J; h( l. r( mdir /b %1 *.txt>c:\a.txt
9 L- K" s& M. s% n- cecho.
( J4 @( a" i$ Uecho.5 x- Z( q6 a+ ^ F
echo./ E; r# v3 V- a, q& _
; E4 }# ~# Y& h5 H
echo 备份完成,正在处理文件,添加如下分隔线……
8 ?% r" C- g9 ?' Gecho." R5 T O; @; T! u# J
echo 8 J$ g. A& k5 d& ]1 z8 _& z
( {0 Y2 k: g' H. `
===========================================================
' ?5 f" J7 H& X3 k, R' s% T6 c2 f/ X# ]3 M- i4 X4 @
========================================================== M0 r5 a2 ^9 ^+ B+ `" m" _
for /f %%i in (c:\a.txt) do echo.>>%1\%%i & echo
3 \- h% V' E7 W' E, H2 ?5 i2 D; z% y4 p1 i/ r
===========================================================/ ?% o" v% H+ m+ q s8 t" p

1 L0 U! x- @3 I/ o& B$ M! Z2 L==========================================================>- R- r c- s5 J5 u( L

, u) `, }9 a( M% a) a% ?>%1\%%i & echo.>>%1\%%i Q( r& L9 U& c
! |" J% O- G W1 ^

h( S0 G# A9 aecho.
4 `. y3 F) t6 z- O D& {7 becho.% T: R' t( c* o# K2 e
echo ……
$ m) ^0 |. W' c$ A9 n! I0 qecho 文件处理完毕,正在合并文件……
4 Y A* u6 ?/ c: W: ~+ u% J+ o/ secho.
9 ^* \: O2 S% Z: M+ xecho.
# i* N% \! G( bcopy %1\*.txt %1\all.txt
7 Z4 U* p2 P& R! a" iecho.4 e0 k/ K- g% o( z0 j8 Z I( a
echo.' b. l/ m7 h) G
echo 文件已合并至all.txt中。
1 P' t% U5 B9 Z& s9 Qdel c:\a.txt
; }: \; W8 M, m* y( X3 _/ U- _8 a1 e
echo.
8 n1 T2 n. O' I0 K* S" R" F7 ^# Aecho.3 X2 c G; N* i! e1 x
echo.* f5 t( p& o5 S& {: g/ G
echo.* Z8 S( W I1 U Q
pause
" @1 x% d# c; T) d6 n O- L, Q5 o8 p& t; S6 |( `. C1 v. Z9 A
1 a# `$ @% P7 Q* _7 S: s, p

9 |1 u3 }& [ C3 e* V:nounite
考完试鸟,心力憔悴呀~~~~接下来,准备补考

TOP

牛人就是牛~~学习^^

TOP

眼睛看花了。

TOP

VBS脚本版的,这个比较好用

很恶心,写了一个多小时,老是出错,最后发现,居然是合并时不支持中文名,所以,中间加入了改名动作,先改了名,再合并
复制内容到剪贴板
代码:
G = InputBox("请输入你要合并的文本文件所在的目录: ","输入目录")

If InStrRev(G,"\")=Len(G) Then
G = Left(G,Len(G)-1)
End If

Set oFSO = CreateObject("Scripting.FileSystemObject")

'检查输入的目录是否存在
If Not (oFSO.FolderExists(G)) Then
MsgBox "输入的目录"&G&"不存在,程序终止",16,"错误"
Wscript.Quit
End If

Const ForReading = 1

Set objOutputFile = oFSO.CreateTextFile(G&"\output.txt")

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set FileList = objWMIService.ExecQuery ("ASSOCIATORS OF {Win32_Directory.Name='"&G&"'}

Where ResultClass = CIM_DataFile")
oFSO.CreateFolder(G&"\backup")
oFSO.CopyFile G&"\*.*", G&"\backup\"

I=0

For Each objFile In FileList
NewName = G&"\"&Cstr(I)&".TXT"
I = I+1
errResult = objFile.Rename(NewName)
Next

Set FileList = objWMIService.ExecQuery ("ASSOCIATORS OF {Win32_Directory.Name='"&G&"'}

Where ResultClass = CIM_DataFile")

For Each objFile In FileList
Set objTextFile = oFSO.OpenTextFile(objFile.Name, ForReading)
strText = objTextFile.ReadAll
objTextFile.Close
objOutputFile.WriteLine strText
Next

objOutputFile.Close

MsgBox "备份的文件放在"&G&"\backup\中"&Chr(10)&Chr(10)&"合并后的文件为"&G&"\output.txt

",64,"完成"

Set objshell = WScript.CreateObject("WScript.Shell")
objshell.run("notepad.exe "&G&"\output.txt")
考完试鸟,心力憔悴呀~~~~接下来,准备补考

TOP

上面那个忘记添加分隔线了~~~
复制内容到剪贴板
代码:
G = InputBox("请输入你要合并的文本文件所在的目录: ","输入目录")

If InStrRev(G,"\")=Len(G) Then
G = Left(G,Len(G)-1)
End If

Set oFSO = CreateObject("Scripting.FileSystemObject")

'检查输入的目录是否存在
If Not (oFSO.FolderExists(G)) Then
MsgBox "输入的目录"&G&"不存在,程序终止",16,"错误"
Wscript.Quit
End If

Const ForReading = 1

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set FileList = objWMIService.ExecQuery ("ASSOCIATORS OF {Win32_Directory.Name='"&G&"'} Where ResultClass = CIM_DataFile")
oFSO.CreateFolder(G&"\backup")
oFSO.CopyFile G&"\*.*", G&"\backup\"
I=0
For Each objFile In FileList
NewName = G&"\"&Cstr(I)&".TXT"
I = I+1
errResult = objFile.Rename(NewName)
Next

Set objOutputFile = oFSO.CreateTextFile(G&"\output.txt")
Set FileList = objWMIService.ExecQuery ("ASSOCIATORS OF {Win32_Directory.Name='"&G&"'} Where ResultClass = CIM_DataFile")

For Each objFile In FileList
objOutputFile.WriteLine "---------------------------------------------------------------------------------------------------------------------"

Set objTextFile = oFSO.OpenTextFile(objFile.Name, ForReading)
strText = objTextFile.ReadAll
objTextFile.Close
objOutputFile.WriteLine strText
objOutputFile.WriteLine "---------------------------------------------------------------------------------------------------------------------"
Next

objOutputFile.Close

MsgBox "备份的文件放在"&G&"\backup\中"&Chr(10)&Chr(10)&"合并后的文件为"&G&"\output.txt ",64,"完成"

Set objshell = WScript.CreateObject("WScript.Shell")
objshell.run("notepad.exe "&G&"\output.txt")
考完试鸟,心力憔悴呀~~~~接下来,准备补考

TOP

本功能由奇虎搜索实现

相关主题

标题 作者 最后发表
[站外] 自动生成SQL2005数据字典的脚本   [转帖] 涂文瀚 2008-09-02
[站外] SQL脚本60多兆,查询分析器不能完全打开   [转帖] jeffry23 2008-09-02
[站外] 荥阳 中国诗歌文化节开场脚本   [转帖] 佛陀老邱 2008-09-02
点击阅读更多关于的相关帖子  更多相关主题