• 締切済み

VBSでファイル移動する部分を足したい

取り敢えずスクリプト的には動いている (不要部分とか書き換え途中のままで動作問題なくても間違っている部分が有ると思います  誤動作までは至らないので放置しているというだけです) のですがそのスクリプトに一部の通過ファイルを所定の位置に移動させたいと思います。 ソースの目的と理屈はTSファイルをBATからTSファイルをVBSに送りaviutilに処理させると言う物です。 最終的にTSファイルだけを移動させる形にしたいと言う感じです。 On Error Resume Next Set Args = WScript.Arguments Const ForReading = 1 '************TSファイル関連の設定************* ' テンポラリパス Const TMP_FOLDER = "E:\tsENC\mp4\" ' エンコードしたデータを出力するフォルダ(最後の文字は"\") Const OUTPUT_FOLDER = "E:\tsENC\mp4\" '*************ツール関連の所在************* ' 出力プラグイン番号(メニューの一番上が0) Const OUTPUT_PLUGIN = 0 ' 出力ファイルの拡張子 Const OUTPUT_EXT = ".mp4" ' BonTsDemuxのフルパス Const BonTsDemux_PATH = "E:\aviutil\aviutl99i8\BonTsDemux.exe" ' mmeのフルパス Const mme_PATH = "E:\aviutil\AVIUTIL\mme.exe" ' AviUtlのフルパス Const AVIUTL_PATH = "E:\aviutil\AVIUTIL\aviutl.exe" ' AviUtl Controlを置いてあるフォルダ(最後の文字は"\") Const AUC_FOLDER = "E:\aviutil\AVIUTIL\" ' = スクリプトと同じフォルダ Dim WHSHell, oExec, Fs Set WSHShell = WScript.CreateObject("WScript.Shell") Set Fs = CreateObject("Scripting.FileSystemObject") Function Auc(command, arg) Auc = WSHShell.Run("""" & AUC_FOLDER & "auc_" & command & ".exe"" " & arg, 2, True) End Function Dim i, tmp, tmpm2v, tmpwav, tmpgl, output, pid, hwnd ' AviUtlを起動 hwnd = Auc("exec", """" & AVIUTL_PATH & """") If hwnd = 0 Then Call WScript.Quit(-1) End if For i=0 to Args.Count - 1 tmp = TMP_FOLDER & Fs.GetBaseName(Args(i)) tmpm2v = tmp & ".m2v" tmpwav = tmp & ".wav" tmpgl = tmp & ".gl" output = OUTPUT_FOLDER & Fs.GetBaseName(Args(i)) & OUTPUT_EXT ' TSファイルを分割 Call WSHShell.Run("""" & BonTsDemux_PATH & """" & " -i """ & Args(i) & """ -o """ & tmp & """ -delay 167 -start -quit", 0, True) ' glファイルを作成 Call WSHShell.Run("""" & mme_PATH & """ -g -q """ & tmpm2v & """", 0, True) ' M2Vファイルを開く Call Auc("open", CStr(hwnd) & " """ & tmpm2v & """") Call WScript.Sleep(200) ' WAVファイルを開く Call Auc("audioadd", CStr(hwnd) & " """ & tmpwav & """") ' プロファイルを設定する Call Auc("setprof", CStr(hwnd) & " " & CStr(PROFILE)) Call WScript.Sleep(200) ' 出力プラグインから出力する Call Auc("plugbatch", CStr(hwnd) & " " & CStr(OUTPUT_PLUGIN) & " """ & output & """") Call WScript.Sleep(200) ' ファイルを閉じる Call Auc("close", CStr(hwnd)) ' テンポラリファイルを削除する Call Fs.Delete(tmpm2v) Call Fs.Delete(tmpwav) Call Fs.Delete(tmpgl) Next Dim Fname Dim Fname2 Dim FSO Set Fname = WScript.Arguments If Fname.Count = 0 Then WScript.Echo "ファイルをドラッグしてください。" WScript.Quit End If 'Set FSO = CreateObject("Scripting.FileSystemObject") Fname2 = FSO.GetFile(Fname(0)).Path FSO.MoveFile Fname2, move & FSO.GetFileName(Fname(0)) Set Fname = Nothing Set FSO = Nothing ' スクリプトで起動したAviUtlを終了する Call Auc("exit", CStr(hwnd))

みんなの回答

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.2

オラ、馬鹿だから、だらだら長くて、他ソフトに依存するスクリプトをマル投げされてもよくわからないし、「目的と理屈」っていうのもよくわかんないんだよね。 どちらかというと、具体的に「今あるスクリプトに追加することで、こういう場所にあるこういうファイルをどうしたいんだけど、どうしたらよいのか」と聞かれたほうが答えやすいんだけどな。 >TSファイルをBATからTSファイルをVBSに送り ??? ・「TSファイル」って何ですか? 特定の拡張子ですか、それともtextstreamかなんかですか? ・「BAT」って何ですか? ファイルですか、フォルダですか、 ・「VBS」って何ですか? スクリプトのことですか? とすると、スクリプトにファイルを送るってどういう意味ですか? ま、FSOでcopyfileというメソッドがあるから、movefileの代わりに使うと、移動の代わりにコピーするってことにはなるけど、、、目的によってはもしくは、コピーしてから移動するとか、、、 http://msdn.microsoft.com/ja-jp/library/cc428016.aspx http://msdn.microsoft.com/ja-jp/library/cc428039.aspx

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

自分の力で解決する気が無いのであれば、お金を出して プログラマを雇って下さい。 無料の掲示板で丸投げで何でも解決できるのであれば、 それはプログラマを蔑ろにする行為になりますので。 例えば貴方が花屋さんだとして、 「花が欲しいです」という人に「どうぞ持っていってください」 と言うかどうかです。協力する人は5%にも満たないでしょう。 「自分で種から育てたのですが、2日で枯れてしまいました。 なにが悪かったか教えて下さい」 という人とは全く扱いが異なります。これなら半数の人は協力 してくれるでしょう。 「昨日、貴方のお店の花を買って花瓶に飾っているのですが 長持ちさせる方法はありますか?」なら80%以上の人の 協力が得られるでしょう。 協力してくれる人が1%でもいれば待つと言うのであれば 止めはしませんが、99%の人が協力してくれない事実も 認識しておきましょう。多くの場合、反感を買ってますので。

関連するQ&A

  • VBSでファイル名にシート内のセルの値を付け足す

    現在下記のコードが書いてあるvbsにエクセルファイルをドラック&ドロップをしてパスを外したり、つけたりしています。 その際に、投げ込んだエクセルファイルのファイル名の頭に 投げ込んだエクセルファイルのシート1のセルA1の値を付けたいと考えています。 例 パスのかかっている 間隔.xls というファイルをVBSに投げ込むと パスが外れ ファイル名が あいう間隔.xls という名前に代わって保存される。コピーではなく投げ込んだシートの名前が変わって問題ありません。 あいう はシートのA1セルに入っていた文字です。 ブック内にシートは必ず1つしかありません。 Option Explicit 'Excel 2013 Later Japenese Version Available 'REF: 'REF: '''///---定数の設定Set Enumuragion---///''' Const PWD="paspas" Const msoLanguageIDInstall = 1 '''///---変数の宣言---///''' Dim objArgs, I , strFile Dim objFile, objFolder,objPath,strScr Dim xlApp,Wb Dim objWShell : Set objWShell = Createobject("WScript.Shell") Dim FSO : Set FSO = Createobject("Scripting.FileSystemObject") '''///---ファイル処理開始 Start Document File Conversion---///''' Set objArgs = Wscript.Arguments For I = 0 to objArgs.Count-1 set objFile = FSO.GetFile(cstr(objArgs(I))) If Lcase(Left(FSO.GetExtensionName(objFile.Path) ,3) )="xls" Then Set xlApp =CreateObject("Excel.Application") If xlApp.Version < 14 Then xlApp.Quit: Set xlApp = Nothing:wscript.Quit xlApp.DisplayAlerts=False xlApp.Visible = False set wb=xlapp.WorkBooks.Open(objFile.Path,0,false,,PWd,,True,,false,false,,true,true) if wb.HasPassword=true then wb.Saveas objFile.Path,,"","",False else wb.Saveas objFile.Path,,Pwd,"",False End if wb.close set wb=nothing End If Next xlApp.DisplayAlerts=True xlApp.Quit set xlApp = Nothing このコードをどのように変更すればできますでしょうか?

  • VBSファイル名に特定文字がある場合

    VBSで現在下記のようなコードを組んでいます。 動作としてはコードが組んであるVBSファイルにエクセルシートをドラック&ドロップすると、ブックのパスが外れてファイル名の先頭に シート内のセルE5の文字がつくようになっています。 やりたいのはその後の処理で たとえば、ブックの名前が先頭から#101-1ならAのフォルダへ移動 #101-2ならBのフォルダへ移動という感じのことがしたいです。 つまりファイル名に-1や-2といった文字が先頭から数えて5番のところにあれば その条件に合わせてファイルを指定のフォルダへ移動させたいということです。 正式には-が先頭から5文字目で数字が先頭から6番になります。 どのようにすればよいか教えてください。 Option Explicit 'Excel 2013 Later Japenese Version Available 'REF: 'REF: '''///---定数の設定Set Enumuragion---///''' Const PWD="aaaaa" Const msoLanguageIDInstall = 1 '''///---変数の宣言---///''' Dim objArgs, I , strFile Dim objFile, objFolder,objPath,strScr Dim xlApp,Wb Dim objWShell : Set objWShell = Createobject("WScript.Shell") Dim FSO : Set FSO = Createobject("Scripting.FileSystemObject") '''///---ファイル処理開始 Start Document File Conversion---///''' Set objArgs = Wscript.Arguments For I = 0 to objArgs.Count-1 set objFile = FSO.GetFile(cstr(objArgs(I))) If Lcase(Left(FSO.GetExtensionName(objFile.Path) ,4) )="xlsx" Then Set xlApp =CreateObject("Excel.Application") If xlApp.Version < 14 Then xlApp.Quit: Set xlApp = Nothing:wscript.Quit xlApp.DisplayAlerts=False xlApp.Visible = False set wb=xlapp.WorkBooks.Open(objFile.Path,0,false,,PWd,,True,,false,false,,true,true) if wb.HasPassword=true then wb.Saveas objFile.Path,,"","",False else wb.Saveas objFile.Path,,Pwd,"",False End if Dim n n = wb.Worksheets(1).Range("E5").Value & "_" & wb.Name wb.close FSO.GetFile(objFile.Path).Name = n set wb=nothing End If Next xlApp.DisplayAlerts=True xlApp.Quit set xlApp = Nothing

  • VBSでファイルをコピーして名前変更

    VBSで現在下記のようなコードを組んでいます。 動作としてはコードが組んであるVBSファイルにエクセルシートをドラック&ドロップすると、ブックのパスが外れてファイル名の先頭に シート内のセルE5の文字がつくようになっています。 そしてそのファイル名に指定した文字がある場合 指定したフォルダへ移動されます。 今回行いたいのは、その移動したあとの処理で 移動したファイルをそのフォルダ内でコピーして 名前を変更したいです。 例えば移動してきたファイル名が #101-1test.xlsxだとして、そのファイルをコピーして ABC101-1_DEFG.xlsxという名前で同じフォルダ内にコピーしたい。 ファイルの中身は同じだけど、名前を変更して同じフォルダ内に ファイルを作成したいということです。 ちなみに移動してきた時の始めのファイル名、#〇〇〇-〇は必ずこの形です。 なので、頭のシャープと-1以降の文字を削除して 〇〇〇の手前につける文字と、-〇以降につける文字が指定できれば完璧です。 このようなことができるかわかりませんが、よろしくお願いします。 よろしくお願いします。 Option Explicit 'Excel 2013 Later Japenese Version Available 'REF: 'REF: '''///---定数の設定Set Enumuragion---///''' Const PWD="aaaaa" Const msoLanguageIDInstall = 1 '''///---変数の宣言---///''' Dim objArgs, I , strFile Dim objFile, objFolder,objPath,strScr Dim xlApp,Wb Dim objWShell : Set objWShell = Createobject("WScript.Shell") Dim FSO : Set FSO = Createobject("Scripting.FileSystemObject") '''///---ファイル処理開始 Start Document File Conversion---///''' Set objArgs = Wscript.Arguments For I = 0 to objArgs.Count-1 set objFile = FSO.GetFile(cstr(objArgs(I))) If Lcase(Left(FSO.GetExtensionName(objFile.Path) ,4) )="xlsx" Then Set xlApp =CreateObject("Excel.Application") If xlApp.Version < 14 Then xlApp.Quit: Set xlApp = Nothing:wscript.Quit xlApp.DisplayAlerts=False xlApp.Visible = False set wb=xlapp.WorkBooks.Open(objFile.Path,0,false,,PWd,,True,,false,false,,true,true) if wb.HasPassword=true then wb.Saveas objFile.Path,,"","",False else wb.Saveas objFile.Path,,Pwd,"",False End if Dim n n = wb.Worksheets(1).Range("E5").Value & "_" & wb.Name wb.close FSO.GetFile(objFile.Path).Name = n If Mid(objFile.name, 5, 2) = "-1" Then FSO.MoveFile objFile.path, "F:\A\" Else MsgBox objFile.Name & " 該当せず" End If set wb=nothing End If Next xlApp.DisplayAlerts=True xlApp.Quit set xlApp = Nothing

  • VBSエラー"オブジェクト型の変数は定義されていません"について

    以下のコードは、あるルートフォルダにトップページ"TOP.html"をつくり(または上書きし)、各階層のフォルダの中に存在する拡張子がabc(仮称)のファイルと同じ名前のhtmlファイルを、abcファイルと同じフォルダに同じ数だけつくり(または上書きし)、トップページにその作成したすべてのhtmlファイルへのリンクを表示させる、という構想で作成中のVBSなのですが(具体的な数値等は"****"としました)、これを実行すると「●(マル)」と書いた55行目のところでエラー「オブジェクト型の変数は定義されていません」となってしまいます。このエラーをどのように対処すればよいかを教えていただければと思います。 私はExcelのVBAは多少の経験がありますが、VBScriptを書いたのはこれが初めてで、HTMLも未経験です。14・15行目の呼び出し方はこれでいいのかどうかも不安です。よろしくお願いします。 Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set CurFolder = fso.GetFolder(".") Call CreatePages1(CurFolder, "*.abc", files) Set outFileStream = Nothing Set CurFolder = Nothing Set fso = Nothing 'サブフォルダへの処理 Public Sub SearchSubFolder1(ByVal folder) Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set folder2 = fso.GetFolder(folder.Path) For Each folder2 In folder.SubFolders Call CreatePages1(folder2, searchPattern, files) '再帰呼び出し Call SearchSubFolder1(folder2) Next Set fso = Nothing End Sub 'htmlファイル作成 Public Sub CreatePages1(ByVal folder, ByVal searchPattern, ByRef files) Set fso = WScript.CreateObject("Scripting.FileSystemObject") 'トップページを途中まで作成する。 Set outFileStream = fso.CreateTextFile(folder.Path & "\TOP.html", True) outFileStream.WriteLine "<HTML>" outFileStream.WriteLine "<HEAD>" outFileStream.WriteLine "<TITLE>Viewer</TITLE>" outFileStream.WriteLine "</HEAD>" outFileStream.WriteLine "<BODY>" '各htmlファイルを作成する。 For Each fs In folder.Files Set outFileStream = fso.CreateTextFile(folder.Path & "\" & Left(fs.Name, Len(fs.Name) - Len(Ext)-1) & ".html", True) outFileStream.WriteLine "<HTML>" outFileStream.WriteLine "<HEAD>" outFileStream.WriteLine "<TITLE>Browser</TITLE>" outFileStream.WriteLine "</HEAD>" outFileStream.WriteLine "<BODY>" outFileStream.WriteLine "<OBJECT ID=""Browser1"" WIDTH=**** HEIGHT=**** CLASSID=""CLSID:****"">" outFileStream.WriteLine "<PARAM NAME=""_Version"" VALUE=""*****"">" outFileStream.WriteLine "<PARAM NAME=""_ExtentX"" VALUE=""*****"">" outFileStream.WriteLine "<PARAM NAME=""_ExtentY"" VALUE=""*****"">" outFileStream.WriteLine "<PARAM NAME=""_StockProps"" VALUE=""*****"">" outFileStream.WriteLine "<PARAM NAME=""FileName"" VALUE=""" & folder.Path & "\" & fs.Name & """>" outFileStream.WriteLine "</OBJECT>" outFileStream.WriteLine "</BODY>" outFileStream.WriteLine "</HTML>" outFileStream.Close() 'トップページの続きを作成する。 Ext = fso.GetExtensionName(fs.Name) If LCase(Ext) = "html" Then ●(マル) outFileStream.WriteLine "<a href=""" & folder.Path & "\" & fs.Name & """>" & Left(fs.Name, Len(fs.Name) - Len(Ext)-1) & "</a><br>" End If Next outFileStream.WriteLine "</BODY>" outFileStream.WriteLine "</HTML>" outFileStream.Close() 'サブフォルダへの処理。 Set fp = fso.GetFolder(folder.Path) Call SearchSubFolder1(fp) End Sub

  • VBSバックアップ

    バックアップスクリプト(VBS)について教えて下さい。 単純にディレクトリをバックアップするスクリプトは、出来たのですが これに付加機能を与えたいです。 ◆世代管理をしたい。 ◆iniファイルから、バックアップ元と先、管理する世代等の情報を読み込みたい。 <bkup.vbs> Option Explicit Const ForReading = 1 '読み込み Const ForWriting = 2 '書きこみ(上書きモード) Const ForAppending = 8 '書きこみ(追記モード) Dim objFileSys Dim objShell Dim strCopyFrom Dim strCopyTo Dim strToDir Dim strNewDate WScript.echo "バックアップを開始します" Set objFileSys = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("WScript.Shell") strNewDate = Year(Now) & _ Right(("0" & CStr(Month(Now)+0)),2) & _ Right(("0" & CStr(Day(Now)+0)),2) strCopyFrom = "C:\vbs" strToDir = "C:\backup" strCopyTo = objFileSys.BuildPath(strToDir,strNewDate) If objFileSys.FolderExists(strCopyTo) = True then WScript.echo "指定のパスには既にディレクトリが存在する為、" & _"バックアップ処理を中断します。" WScript.Quit Else objFileSys.CopyFolder strCopyFrom,strCopyTo WScript.echo "バックアップ処理は正常に完了しました。" End If Set objFileSys = Nothing Set objShell = Nothing 宜しくお願い致します。

  • VBSで指定したフォルダー内のファイルを書き出さないようにする

    あるフォルダ以下のファイル名を出力ファイル、f.name.txtに書き出すのですが "新しいフォルダ"というフォルダのなかにあるファイルは書き出さないようにしたいのですが、意に反してフォルダー内の全てのファイル名を書き出してしまいます。どこがおかしいのでしょう? ********************************************** Set FSO = CreateObject("Scripting.FileSystemObject") Set fl = WScript.CreateObject("Scripting.FileSystemObject") Set abc = fl.CreateTextFile("f.name.txt") ShowSubfolders FSO.GetFolder(".") Sub ShowSubFolders(Folder) For Each File in Folder.Files 'Folder内のファイルを列挙する Fname = File.name FolderCheck=Folder & "\" & "新しいフォルダ" If Folder <> FolderCheck Then abc.Write Folder & "\" & Fname & vbCrLf End If Next For Each Subfolder in Folder.SubFolders 'Foler内のフォルダを列挙する ShowSubFolders Subfolder '再帰呼び出し Next End Sub abc.Close

  • VBS について

    以下のスクリプトは、あるフォルダ以下の(サブフォルダを含む)abcファイル(仮称)すべてについて同じ名前でhtmlファイルをつくると同時に、そこへリンクするメニューのページを上書きする、という構想で書いたものですが、実行すると2行目で ')'がありません というエラーが出てしまいました。(具体的な数値等は"****"としました) 私はExcelのVBAは多少の経験がありますが、VBScriptを書いたのはこれが初めてで、HTMLも未経験です。 "')'がない"というのはどういうことなのか、このエラーをどのように対処すればよいかを教えていただければと思います。よろしくお願いします。 Set fso = WScript.CreateObject("Scripting.FileSystemObject") Public Sub GetAllFiles(ByVal folder As String, ByVal searchPattern As String, ByRef files As ArrayList) 'folderにあるファイルを取得する。 Dim fs As String() = System.IO.Directory.GetFiles(folder, searchPattern) 'トップページを途中まで作成する。 Set outFileStream = fso.CreateTextFile(folder.Path & "\***", True) outFileStream.WriteLine "<HTML>" outFileStream.WriteLine "<HEAD>" outFileStream.WriteLine "<TITLE>****</TITLE>" outFileStream.WriteLine "</HEAD>" outFileStream.WriteLine "<BODY>" '各htmlファイルを作成する。 For Each fs In folder.Files Set outFileStream = fso.CreateTextFile(folder.Path & "\" & Left(fs.Name, Len(fs.Name) - Len(Ext)-1) & ".html", True) outFileStream.WriteLine "<HTML>" outFileStream.WriteLine "<HEAD>" outFileStream.WriteLine "<TITLE>***</TITLE>" outFileStream.WriteLine "</HEAD>" outFileStream.WriteLine "<BODY>" outFileStream.WriteLine "<OBJECT ID=""****"" WIDTH=*** HEIGHT=*** CLASSID=""CLSID:****"">" outFileStream.WriteLine "<PARAM NAME=""_Version"" VALUE=""***"">" outFileStream.WriteLine "<PARAM NAME=""_ExtentX"" VALUE=""***"">" outFileStream.WriteLine "<PARAM NAME=""_ExtentY"" VALUE=""***"">" outFileStream.WriteLine "<PARAM NAME=""_StockProps"" VALUE=""***"">" outFileStream.WriteLine "<PARAM NAME=""FileName"" VALUE=""" & folder.Path & "\" & fs.Name & """>" outFileStream.WriteLine "</OBJECT>" outFileStream.WriteLine "</BODY>" outFileStream.WriteLine "</HTML>" outFileStream.Close() 'トップページの続きを作成する。 Ext = fso.GetExtensionName(fs.Name) If LCase(Ext) = "html" Then outFileStream.WriteLine "<a href=""" & folder.Path & "\" & fs.Name & """>" & Left(fs.Name, Len(fs.Name) - Len(Ext)-1) & "</a><br>" End If Next outFileStream.WriteLine "</BODY>" outFileStream.WriteLine "</HTML>" outFileStream.Close() 'folderのサブフォルダを取得する。 Dim ds As String() = System.IO.Directory.GetDirectories(folder) 'サブフォルダへの処理も行う。 Dim d As String For Each d In ds GetAllFiles(d, searchPattern, files) Next d End Sub Set CurFolder = fso.GetFolder(".") GetAllFiles(CurFolder, "*.abc", files) Set outFileStream = Nothing Set CurFolder = Nothing Set fso = Nothing

  • VBS 改行無しのファイル抽出方法

    いつもお世話になっております。 WindowsXP環境にある下記のようなVBSがあります。 コード------------------------------------------------------------------ path = "a.txt" Set FSO = WScript.CreateObject( "Scripting.FileSystemObject" ) '全行読み込み処理 (改行を1行単位として) Set f = FSO.OpenTextFile( path ) Do Until f.AtEndOfStream line = f.ReadLine() i_line = f.Line - 1 Loop WScript.Echo "全件数= " & i_line '最終行-5読み込み処理 Set f = FSO.OpenTextFile( path ) For i=1 To i_line - 6 f.SkipLine Next LAST5 = f.ReadLine() MOJI = Mid(LAST5,20,5) WScript.Echo "文字 = " & MOJI コード------------------------------------------------------------------ 上記VBSの簡単な流れは・・・ (1)改行で1行とみなす a.txt を全行取得。 (2)全件数を表示 (3)最終行から5行前の行まで移動。 (4)(3)の行から20文字からの5文字を取得。 (5)5文字を表示。 とこんな感じです。 しかし、これだと改行有のファイルにのみ有効で 改行無には対応出来ません。 例えば120文字で1行とみなすファイルでも同様の 取得がしたいのです。 ご存知の方がいれば、ご教授願いませんでしょうか? 何卒、宜しくお願い致します。

  • 再度:VBSで指定したフォルダー内のファイルを書き出さないようにする

    先ほども似たような質問をしました。 あるフォルダの中にあるファイル名の一覧をファイル"f.name.txt"を書き出したいのですが"新しいフォルダ"のなかにあるファイルは書き出さないようにしたいです。下記のVBSは"新しいフォルダ"のなかに更にフォルダが階層的に存在するときには"新しいフォルダ"の中のファイルも全て書き出してしまいます。 "新しいフォルダ"の中にフォルダがない場合は正しく動きます。 "新しいフォルダ"の中にフォルダが階層的にあっても"新しいフォルダ" の中にあるファイル名を書き出さないようにするにはどうしたらよいのでしょう? ************************************************************** Set FSO = CreateObject("Scripting.FileSystemObject") Set fl = WScript.CreateObject("Scripting.FileSystemObject") Set abc = fl.CreateTextFile("f.name.txt") ShowSubfolders FSO.GetFolder(".") Sub ShowSubFolders(Folder) If Folder.Name <> "新しいフォルダ" Then For Each File in Folder.Files 'Folder内のファイルを列挙する Fname = File.name abc.Write Folder & "\" & Fname & vbCrLf Next End If For Each Subfolder in Folder.SubFolders 'Folder内のフォルダを列挙する ShowSubFolders Subfolder '再帰呼び出し Next End Sub abc.Close

  • VBSでフォルダ、ファイル作成時のエラーコード

    フォルダ、ファイルが存在しないとき、作成するスクリプトをVBSで作成していますが、疑問点があるのでご教示ください。 objFSO.CreateFolder、objFSO.CreateTextFileを実行が、正常に行われた場合、 Err.Numberに0がセットされると思っていましたが、実際は違っていました。 objFSO.CreateFolderでフォルダが作成される場合、Err.Numberに13が返されます。 objFSO.CreateTextFileでファイルが作成される場合、Err.Numberに438が返されます。 このスクリプトを実行後、フォルダ、ファイルが存在しない場合、作成されることも確認しています。 フォルダ作成後、作成されたフォルダに対して、ファイルの作成/データの書き込みのアクセス権を拒否にすると返されるErr.numberに70がセットされることも確認しています。 なぜ、フォルダ、ファイルが作成された場合、0が返されないのかご存知の方がいらっしゃいましたらご教示ください。 また、その情報が記載されている書籍およびサイトがあれば、お教えいただければ、幸いです。 Option Explicit Dim objFSO Dim objFile Const strFolderName = "C:\VBS" Const strFileName = "C:\VBS\test.txt" On Error Resume Next Set objFSO = CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then WScript.Echo "FSOオブジェクトを作成しました" Else WScript.Echo "FSOオブジェクトを作成できませんでした" WScript.Quit(1) End If If objFSO.FolderExists(strFolderName) Then WScript.Echo "フォルダが見つかりました" Else WScript.Echo "フォルダが見つかりませんでした" If objFSO.CreateFolder(strFolderName) Then If Err.Number = 13 Then WScript.Echo "フォルダを作成しました" Else WScript.Echo "フォルダを作成できませんでした" WScript.Quit(1) End If End If End If If objFSO.FileExists(strFileName) Then WScript.Echo "ファイルが見つかりました" Else Script.Echo "ファイルが見つかりませんでした" If objFSO.CreateTextFile(strFileName) Then If Err.number = 438 Then WScript.Echo "ファイルを作成しました" Else WScript.Echo "ファイルを作成できませんでした" WScript.Quit(1) End If End If End If