ファイルの作成日時について

このQ&Aのポイント
  • 職場で簡単なファイルのバックアップPGをWSHで作っていますが、ファイルの作成日時が思うように入ってくれません。
  • WSHからバッチを呼び出してファイル作成する際、リネームしたファイルの作成日時が入ってしまうため、回避策を知りたいです。
  • 環境はWindows7Pro SP1で、将来的にWindows Server 2008R2で実行したいと考えています。
回答を見る
  • ベストアンサー

ファイルの作成日時について

職場で簡単なファイルのバックアップPGをWSHで作っていますが ファイルの作成日時が思うように入ってくれません。 WSHの流れは下記にしたいと考えています。 (1)前回分のファイルを作成日時を末尾に付けてリネーム (2)WSHからバッチを呼び出して、ファイル作成 (2)でファイルが作成はされるのですが、(1)の処理でリネームした ファイルの作成日時(実行時間より古い時間)が入って作成されてしまい、(2)が実行された 日付が入ってくれません。 ちなみに、更新日時アクセス日時は(2)の実行時間が入ります。 環境は以下になります。 OS:Windows7Pro SP1 →この先WindowsSV 2008R2で実行させたいと考えています。 Windowの仕様なのか、どうなのか、わからないのですが どなたか何か回避策をご存じの方がみえれば、ご教授をお願いいたします。 テストで作成したWSHとBatのソースを下記に貼り付けます。 WSH *************************************** option explicit '変数定義 Dim objFso Dim objFile Dim objWShell 'オブジェクトの生成 Set objFso = Wscript.CreateObject("Scripting.FileSystemObject") Set objFile = objFso.GetFile("C:\testDir\File-A.txt") 'ファイル名変更 objFso.GetFile("C:\testDir\File-A.txt").Name = "File-B.txt" 'オブジェクト解放 Set objFile = Nothing 'bat実行 Set objWShell = CreateObject("WScript.Shell") objWShell.Run "C:\testDir\echo.bat", 0, True 'batで作成したFile-Aのオブジェクト生成 Set objFile = objFso.GetFile("C:\testDir\File-A.txt") 'オブジェクト解放 Set objWShell = Nothing Set objFile = Nothing Set objFso = Nothing WSH *************************************** Bat **************************************** echo AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > C:\testDir\File-A.txt Bat **************************************** 以上、よろしくお願いします。  

質問者が選んだベストアンサー

  • ベストアンサー
  • kteds
  • ベストアンサー率42% (1876/4424)
回答No.2

その方法での名前の変更はおかしくありませんか? たとえばコマンドプロンプトでの Rename コマンドや Windowsエクスプローラでの「名前の変更」では ファイルの「作成日時」は当初の作成日時のままです。 たとえば添付画像の DCサーボ.html ファイルは Renameや「名前の変更」を行なっても作成日時に変化はありません。 > objFso.GetFile("C:\testDir\File-A.txt").Name = "File-B.txt" の結果、Windowsエクスプローラで照会しても作成日時が更新されていますか?

pc_beginer
質問者

お礼

対応策として、更新日時を使用して日付を比較することにしました。 ご回答ありがとうございました。

pc_beginer
質問者

補足

ご回答ありがとうございます。 私のご説明が足りておらず、すみません。 私が実現したいことは、作成日時を変更したいのではなく、 作成日時を取得してファイル名(ファイル名をFileAとして作成。)の末尾に作成日時を付け足して リネームさせたいのですが、そもそも、ファイル(FileA)が作成されるときに付く 作成日時が過去日時が付いてしまうので、困っております。 説明が足りているか、わらりませんが、処理の流れを記載します。 1)FileAを作成 2)FileAを作成日時を取得リネーム   なので、ファイル名はこんな感じ→ FileA_20140411 3)別処理(バッチ)でFileAを作成 ※作成する場所は同じフォルダ上  ※3)の処理で新しいFileAを作成するときに1)でリネームした古いFileAの作成日時が   何故か、入って新しいFileAが作成されてしまう。 サンプルで載せた、ソースを数回実行していただき、FIle-Bの作成日時をプロパティから 確認していただければ、現象がわかるかと思います。 よろしくお願いします。

その他の回答 (1)

  • kteds
  • ベストアンサー率42% (1876/4424)
回答No.1

DateCreated プロパティで確認してみてください。 echo "ファイル作成日付: " & objFile.DateCreated

pc_beginer
質問者

補足

kteds様 ご回答ありがとうございます。 「echo "ファイル作成日付: " & objFile.DateCreated」入れて確認しましが、結果は同じでした。 DateLastModifiedも、DateLastAccessedも入れて確認しましたが、DateCreatedの日時のみ過去日付(リネームをかけたファイルの作成日時)が付いてました。 同一ファイル名でファイルを作ると、どうやら上記の動きをするようです。

関連するQ&A

  • WSHで複数のファイルを読み取り専用にしたい

    WSH初心者です。 ワールドカードを使って複数のファイルを読み取り専用にする方法がわかりません。 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.GetFile("C:\*.txt") objFile.Attributes = (objFile.Attributes Or 1) これだと「ファイルが見つかりません」というエラーが出ます。 属性設定には、ワイルドカードが使えないのでしょうか?

  • 特定のワークシートcsvファイル書き出しほか

    エクセルブックの中身が、 1番目 graphシート 2番目から19番目 ワークシート で構成されているエクセルファイルが100個 AAAというフォルダに入っています。 それぞれのエクセルブックにあるシートを、ブックのファイル名にしたフォルダを作成し、その中にcsvで書き出すプログラムを作りました。 また、AAAのフォルダの1つ上のフォルダ(VBA実行するカレントフォルダ)には、テキストファイルもあり、作成されたフォルダに合わせてコピーするようにしています。 一応、期待通りの動作をしましたが、スッキリとしたプログラムとするために、アドバイスをいただけないでしょうか? また、できれば、それぞれのブックの2番目から7番目のワークシートのみをcsvファイルで書き出したいと思い、シートを2番目から順にアクティブにして書き出すように変更しても1番目のグラフシートからcsvになってしまいました。 特定のワークシートのみをcsvファイルで書き出すにはどのように書いたら良いでしょうか? よろしくおねがいしむす Sub ファイル一括作成()     Application.ScreenUpdating = False         '対象ブックの選択     'フォルダ内のブックを順次選択     Dim FolderPath As String     Dim objFSO As Object     Dim objBook As Object     Dim objFiles As Object     Dim objFile As Object     Dim mysma4 As Object     Set objFSO = CreateObject("Scripting.FileSystemObject")     FolderPath = ActiveWorkbook.Path & "\AAA"     Set objBook = objFSO.GetFolder(FolderPath)     Set objFiles = objFSO.GetFolder(FolderPath).Files     Set mysma4 = objFSO.GetFile(ActiveWorkbook.Path & "\fig_all.TXT")     For Each objFile In objFiles      If objFSO.GetExtensionName(Path:=objFile) Like "xlsx" Then     'ベースファイル名フォルダ作成&sma4ファイルコピー       objFSO.CreateFolder Path:=FolderPath & "\" & objFSO.GetBaseName(objFile)       mysma4.Copy Destination:=FolderPath & "\" & objFSO.GetBaseName(objFile) & "\fig_all.TXT"     '各ファイルcsv書き出し      Workbooks.Open objFile.Path       For Each ws In Worksheets '各シートに対して処理を繰り返す           ws.Activate           'ベースファイルと同じ階層に出力           ActiveWorkbook.SaveAs _           Filename:=FolderPath & "\" & objFSO.GetBaseName(objFile) & "\" & ws.Name & ".csv", _           FileFormat:=xlCSV       Next ws       ActiveWorkbook.Close SaveChanges:=False      Else      End If     Next     MsgBox "ファイル作成が完了しました。"     Set objFSO = Nothing     Set objBook = Nothing     Set objFiles = Nothing     Set mysma4 = Nothing     Application.ScreenUpdating = True End Sub

  • VBSでファイル作成後、書き込みできない

    ファイルが存在している場合は、ファイルをオープンして書き込み、ファイルが存在していない場合は、ファイルを作成後、オープンして書き込みを行わせたいと考えています。 しかし、ファイルが存在していないとき、ファイルは作成されるのですが、『エラー:800A0046 書き込みできません。VBScript実行時エラー』が出て、書き込みができません。モードをWritingにしても同じでした。 お手数をおかけしますが、ご教示いただけますようお願いいたします。 Option Explicit '■ オブジェクトの宣言 Dim objFSO Dim objFile '■ 定数の宣言 Const strFileName = "C:\VBS\TEST.TXT" '■ 定数の宣言 '// ファイル入出力モード(8:追加書き込み) Const ForAppending = 8 Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FileExists(strFileName) Then WScript.Echo "ファイルが見つかりました" Else WScript.Echo "ファイルが見つかりませんでした" Set objFile = objFSO.CreateTextFile(strFileName) If IsObject(objFile) Then WScript.Echo "ファイルを作成しました" Else WScript.Echo "ファイルを作成できませんでした" WScript.Quit(1) End If End If '// ファイルのオープン Set objFile = objFSO.OpenTextFile(strFileName,ForAppending) objFile.WriteLine "2012/12/21,100,ブレーキパッド,35000"

  • VBSでのファイル読込、出力操作について

    いつもありがとうございます。 掲題の件について、ご教授頂けますでしょうか。 下記のように『start.vbs』を実行すると『a.txt』の行に記載されている実行ファイル名を読み込み 『test.vbs』にファイル名分のコマンドを書き込みしたいです。 例) ----------------------------- start.vbs (作成途中) ----------------------------- Set objWShell = CreateObject("wscript.shell") Set objFso = CreateObject("Scripting.FileSystemObject") Set objFile = objFso.OpenTextFile("c:\a.txt", 1, False) ' 出力先ファイル Set objVBSFile = objFSO.CreateTextFile(c:\test.vbs, True) If Err.Number > 0 Then WScript.Echo "Open Error" Else Do Until objFile.AtEndOfStream objVBSFile.WriteLine(objFile.ReadLine) Loop End If ----------------------------- a.txt ----------------------------- adobe.exe photoshop.exe ****.exe    ・    ・    ・ ------------------------------ start.vbs ------------------------------ objWShell.Run "cmd.exe c:\adobe.exe ", 0, True objWShell.Run "cmd.exe c:\photoshop.exe ", 0, True objWShell.Run "cmd.exe c:\****.exe ", 0, True    ・    ・    ・ vbsをサイトを参考にして作ってはいるものの、start.vbsを実行すると a.txtのファイル名をvbsに書き込むのが限界です。 少しずつ勉強していくのですが、本件少し早めに作りたいという背景があり ご教授頂けませんでしょうか。 また、わかりにくい説明となっておりますが どうぞ宜しくお願い致します。

  • VBS ファイルマージ処理

    特定のDir内、複数ファイルのレコードを全てマージする為、 以下の処理を考えておりますが実現に至っておりません。 Fileがなくなるまで、ループ処理をさせる為、File名 の(1)から(2)へFile名の受け渡し方法が解かりません。 何方か有識者の方、ご教授頂けませんでしょうか もっと賢くマージが出来るので有りますならば、その方法 を教えて頂けませんでしょうか ※Dir内にFileはユニークなFile名にて、複数個作られます。 ※マージに必要なFileだけがDirには作られます。 ※マージするFileの順番は問いません。 (1)C:\temp\temp Dir内のFile名を取得 Set objFso = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder("C:\temp\temp") objFile = objFso.GetAbsolutepathname("temp_ini.txt") Set objOut = objFso.OpenTextFile(objFile, 2, False) For Each objFile In objFolder.Files objFilemei = objFile.Name objOut.Writeline objFilemei next ※File名の受け渡しがわからず、一旦Fileに書き出してます (2)Fileが無くなるまで、File内のレコードを全て読込み、マージファイルを作成(予定) objFile1 = objFso.GetAbsolutepathname("temp_temp.txt") Set objin = objFso.OpenTextFile("temp_ini.txt",1) Do Until objin.atendofstream = True linedata = objin.readline() loop 説明が悪くてすみませんが、よろしくお願い致します。

  • CSVファイル

    CSVファイルを1行ずつ比較して読み込み、一致した行を別ファイルに記述していこうと思っています。 現在、csvファイルを読み込む所まで出来ています。 比較して別ファイルに記述する方法を教えて下さい。 もしくはアドバイスください。 【ファイルの中身】 "09/09/2005 0:00:00,aaa,bbb,ccc" 【比較条件】 当日の日付を取得し、年月日だけで比較する Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:\test.csv") Do while objFile.ReadLine <> ""         'IF文を記述(条件:日付)        '別ファイルに記述する Loop objFile.close Set objFileSystem = Nothing Set objFile = Nothing

  • ファイルへの書き込み

    いままでPrintメソッドを使って書き込みしていました。 ちょっと志向を変えてオブジェクト(?)をつかってプログラミングしています。 ファイルの書き込みでつまづいたので教えてください。 真ん中くらいに質問文があります Dim objFileSystem As Object Dim objFile As Object Dim strFileName As String Dim strBuff As String ' 読み込むファイル名 strFileName = "Readme.txt" ' FileSystemObjectオブジェクトへの参照 Set objFileSystem = CreateObject("Scripting.FileSystemObject") ' ファイルを開く Set objFile = objFileSystem.OpenTextFile(strFileName) ' ファイルの最後に達するまでループ strBuff = strBuff + naiyo.Text   'ここで質問。この書き方だとファイルモードが不正とエラーが出ます。   'この部分どう書けばよいのでしょうか? objFile.writeline (strBuff) ' ファイルを閉じる objFile.Close ' オブジェクトを解放 Set objFileSystem = Nothing Set objFile = Nothing オブジェクト変数(というのでしょうか(^^ゞ)を使ったファイルの書き込み方教えてください。

  • ファイル書き込み

    out.csvファイルに追記していくにはどのように記述すればいいのでしょうか? アドバイス下さい。 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:\test.csv") 'objFile.ReadLine Do While Not objFile.AtEndOfStream StrLine = objFile.ReadLine MyString = split(StrLine,",") ' msgbox Mid(MyString(0),2,10) ' MyString = split(objFile.ReadLine,",") if Mid(MyString(0),2,10) = "(PDH-CSV 4" then Set objWFile=objFSO.OpenTextFile("c:\out.csv",2,true) objWFile.write(StrLine) msgbox "!!!" end if ' if Mid(MyString(0),2,10) = DateString then Set objWFile=objFSO.OpenTextFile("c:\out.csv",2,true) objWFile.write(StrLine) ' 'msgbox Mid(MyString(0),2,10) msgbox "???" end if loop objFile.close Set objFSO = Nothing Set objFile = Nothing

  • VBS

    VBSであるファイルを1行ずつ読み込み、その読み込んだ値を ある別のファイルにリダイレクトしたいのですが、 どのように書けばよいか教えてください。 下記のように、echoでは出すことができるのですが、 ファイルにリダイレクトというのができません。 よろしくお願いします。 ==== sample shell ========================= Option Explicit On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then Set objFile = objFSO.OpenTextFile("d:\dr1.txt") If Err.Number = 0 Then Do While objFile.AtEndOfStream <> True WScript.Echo objFile.ReadLine Loop objFile.Close Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFile = Nothing Set objFSO = Nothing ============================================================

  • VBSで、テキストファイルに対して、全体の途中に文字列を追加したい

    こんばんわ VBSについて質問です。 テキストファイルを開いて、文字列を追加するスクリプトを作成したいのですが、 以下のようなプログラムであれば、行の一番下に文字を追加できると思います。 ########ここから Dim objFS,objText,objFile Set objFS = CreateObject("Scripting.FileSystemObject") Set objFile = objFS.GetFile("C:\test\vbs\test.txt") Set objText = objFile.OpenAsTextStream(8,-2) objText.WriteLine("新しい行") Set objFILE = Nothing Set objText = Nothing ############ここまで しかし今やりたいのは分の途中に文字をいれたい。 たとえばテキストファイルが A B C D というファイルだったら、 "B"を検索して、Bの下に”新しい行”という文字列を追加したいです。 いろいろ調べましたがどうもうまくいきません。 わかる方ご教授願います。