VBSの質問です

hogeフォルダの中に
aaa1.html
aaa2.html
aaa10.html
というファイルがあるのですがこれを
数字の若い順に結合できる方法を教えて下さい
Set objShell = CreateObject("WScript.Shell")
objShell.Run "cmd.exe /c copy hoge\*.html ketugo.html",true
というスクリプトで結合すると
aaa1.html
aaa10.html
aaa2.html
の順に結合されてしまいます
どのようなスクリプトを書けばいいのでしょうか?

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/03/15 14:33:52
  • 終了:2013/03/22 14:35:04

回答(1件)

id:taknt No.1

きゃづみぃ回答回数13538ベストアンサー獲得回数11982013/03/15 15:11:06

ポイント100pt
Const InFolder = "C:\hoge"
Const motofilename = "aaa"
Const OutFileName = "b.html"
Const ForReading = 1, ForWriting = 2
Dim fso, f, fc, fn, InFile, OutFile
Dim k
Dim tb()
Dim tb2()


Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(InFolder)
Set fc = f.Files
k=0
For Each fn in fc
	a=instr(fn,".html")
	if a>0 then
		b=left(fn,a-1)
		d=right(b,len(b)-len(InFolder)-1)
		c=right(d,len(d)-len(motofilename))
		if left(d,len(motofilename))=motofilename then
			k=k+1
			redim Preserve tb(k)
			redim Preserve tb2(k)
			tb(k)=c
			if trim(tb(k))="" then tb(k)=0
			tb(k)=cint(tb(k))
			tb2(k)=fn
		end if
	end if
Next

for a=1 to k
	for b=a to k
		if tb(a)>tb(b) then
			c=tb(a)
			tb(a)=tb(b)
			tb(b)=c
			d=tb2(a)
			tb2(a)=tb2(b)
			tb2(b)=d
		end if
	next
next


Set OutFile = fso.OpenTextFile(OutFileName, ForWriting, true)
for c=1 to k
	Set InFile = fso.OpenTextFile(tb2(c), ForReading)
	OutFile.Write(InFile.ReadAll())
	InFile.Close()
next

OutFile.Close()

Const InFolder = "C:\hoge"
ファイルがあるフォルダ

Const motofilename = "aaa"
共通してあるファイル名の一部

Const OutFileName = "b.html"
出力するファイル名
スクリプトを実行したところに 出力されます。

他5件のコメントを見る
id:taknt

エラーは ないですね。

a1.html やaa1.htmlなどが 混在している環境だと 正しく動かないですね。
分けられるなら フォルダを わけたほうがいいです。

2013/03/15 16:15:20
id:taknt

混在している場合は、指定したファイル名のものだけ連結するように修正しました。

Const motofilename = "aa"
Const OutFileName = "b.html"
Const ForReading = 1, ForWriting = 2
Dim fso, f, fc, fn, InFile, OutFile
Dim k
Dim tb()
Dim tb2()

strPATH = Wscript.ScriptFullName
InFolder = Left(strPATH,InStrRev(strPATH,"\")-1)

Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(InFolder)
Set fc = f.Files
k=0
For Each fn in fc
	a=instr(fn,".html")
	if a>0 then
		b=left(fn,a-1)
		d=right(b,len(b)-len(InFolder)-1)
		if len(d)-len(motofilename) > 0 then
			c=right(d,len(d)-len(motofilename))
			if left(c,1)>="0" and left(c,1)<="9" then
				if left(d,len(motofilename))=motofilename then
					k=k+1
					redim Preserve tb(k)
					redim Preserve tb2(k)
					tb(k)=c
					if trim(tb(k))="" then tb(k)=0
					tb(k)=cint(tb(k))
					tb2(k)=fn
				end if
			end if
		end if
	end if
Next

for a=1 to k
	for b=a to k
		if tb(a)>tb(b) then
			c=tb(a)
			tb(a)=tb(b)
			tb(b)=c
			d=tb2(a)
			tb2(a)=tb2(b)
			tb2(b)=d
		end if
	next
next


Set OutFile = fso.OpenTextFile(OutFileName, ForWriting, true)
for c=1 to k
	Set InFile = fso.OpenTextFile(tb2(c), ForReading)
	OutFile.Write(InFile.ReadAll())
	InFile.Close()
next

OutFile.Close()
2013/03/15 16:23:15

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません