- ベストアンサー
バッチファイルが作成可能でしたら教えてください
指定フォルダの最新のファイルを (グローバル)ホットキーを押すだけで 移動、もしくは削除したいのですがバッチファイルで可能でしたら 作り方を教えてください
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>同じ条件で他のフォルダに移動するというプログラムも >作って頂けないでしょうか? .delete を .move にして、移動先フォルダを指定すればOKです。 ---- move_newer.vbs ---- dim fso set fso = createObject("Scripting.FileSystemObject") dim folder set folder = fso.getFolder("C:\Users\…\監視フォルダ\") dim newerdate dim newerfile dim file for each file in folder.files ' msgbox file.Name & " " & file.DateLastModified '#debug if newerdate < file.DateLastModified then newerdate = file.DateLastModified set newerfile = file end if next if IsObject(newerfile) then ' msgbox "move: " & newerfile.name '#debug newerfile.move "C:\Users\…\移動先フォルダ\" 'フォルダ指定は末尾「\」で end if ---- ここまで ---- ただし、何度も同じファイル名が生成される場合、移動時に「同名ファイルがある」というエラーが生じて、止まってしまいます。 その対策もしますか?
その他の回答 (4)
- asciiz
- ベストアンサー率70% (6803/9674)
>デメリットがなければエラーを避けられるのならば避けたいです 移動するときのファイル名がかぶらなければ良いので、ファイル名に日時文字列を加えるという方法があります。 これで、1秒以内に、移動して→同じファイル名を生成して→移動して、をやらない限り、エラーは出ません。 なお Now() では "2021/09/01 12:34:56"みたいな文字列が取得できますが、ファイル名においてスラッシュやコロンはマズいので、Replaceで消してしまっています。(この例だと "20210901 123456"になる) ---- move_newer2.vbs ---- dim fso set fso = createObject("Scripting.FileSystemObject") dim folder set folder = fso.getFolder("C:\Users\…\監視フォルダ\") dim newerdate dim newerfile dim file for each file in folder.files ' msgbox file.Name & " " & file.DateLastModified '#debug if newerdate < file.DateLastModified then newerdate = file.DateLastModified set newerfile = file end if next dim nowstr nowstr = Replace(Replace(Now(), "/", ""), ":", "") if IsObject(newerfile) then ' msgbox "move: " & newerfile.name '#debug newerfile.move "C:\Users\…\移動先フォルダ\" & nowstr & " " & newerfile.name end if ---- ここまで ---- デメリットはファイル名が長くなることですが。 逆に、移動した日時が記録されると言うメリットも生じたことになりますか。
お礼
ありがとうございます すごく助かりました
- notnot
- ベストアンサー率47% (4900/10358)
> このbatファイル自体が消えました。(他も消えた?) pushdが失敗しているのでは? BATファイルをダブルクリックして実行するなら、末尾に pause を追記して、実行を止めて、エラーメッセージが出てないか確認しましょう。 このbatファイルが消えたのは最新だったからでしょう。 > このbatファイルを含むファイル全部が消えました。 1回の実行で複数のファイルが消えることはあり得ないので、なにか違うファイルを実行したんだと思います。
お礼
なるほど batファイルそのものも消えるんですね ありがとうございます
- notnot
- ベストアンサー率47% (4900/10358)
可能です。 pushd D:\foo\bar\baz ・・・指定フォルダー for /f "delims=" %%A in ('dir /o-d /a-d /b') do ( del "%%A" exit /b ) というBATファイルを作って、そのショートカットをデスクトップに置き、ショートカットのプロパティーでショートカットキーを設定します。 説明としては、ファイル名を新しい順にファイル名を取得してそれを削除してすぐバッチファイルを終了することで、先頭の1ファイルだけの削除にします。
補足
ありがとうございます 具体的にいうとC:\Users\yuu\Desktop\新しいフォルダー (5)の中の最新ファイルを消したいです そして下の記述のテキストファイルを.batに変えてデスクトップ上で実行したところ このbatファイル自体が消えました。(他も消えた?) そしてこのbatファイルをC:\Users\yuu\Desktop\新しいフォルダー (5) の中で使用したところこのbatファイルを含むファイル全部が消えました。 何か間違ってますか? よろしくお願いします pushd C:\Users\yuu\Desktop\新しいフォルダー (5) for /f "delims=" %%A in ('dir /o-d /a-d /b') do ( del "%%A" exit /b )
- asciiz
- ベストアンサー率70% (6803/9674)
VBScriptで組んでみました。 ---- delete_newer.vbs ---- dim fso set fso = createObject("Scripting.FileSystemObject") dim folder set folder = fso.getFolder("C:\xxxx\yyyy\…\監視フォルダ\") '書き換えてください dim newerdate dim newerfile dim file for each file in folder.files ' msgbox file.Name & " " & file.DateLastModified '#debug if newerdate < file.DateLastModified then newerdate = file.DateLastModified set newerfile = file end if next ' msgbox "detele: " & newerfile.name '#debug if IsObject(newerfile) then newerfile.delete end if ---- ここまで ---- '#debug がある行の先頭のアポストロフィ「'」を削ると、msgbox により監視フォルダにどんなファイル名を見つけて、その最終更新日がいつで、最終的にどのファイル(一番新しい物)を削除するか、を表示して動きます。 動作確認してみてください。 その動作で良いとなったなら、このvbsファイルのショートカットを作って、そのショートカットにホットキー設定すると、キーコンビネーション一発で消せるようになるでしょう。 ※スクリプトからdeleteするファイルはゴミ箱に入らず直接消えるので注意しましょう。 ※folder.files を更新順に取り出すことができれば、最初の1つを消す、と簡潔にできる気がするんですが。そんなメソッドやオプションは無さそう…?
補足
ありがとうございます 動作確認したところ、できました。 ゴミ箱に入らずそのまま消えるということなので 同じ条件で他のフォルダに移動するというプログラムも 作って頂けないでしょうか? よろしくお願いします
お礼
ありがとうございます デメリットがなければエラーを避けられるのならば避けたいです もしよろしければお願いしてよろしいですか・