バッチファイルでルートディレクトリの日付フォルダを指定してコピーする方法

このQ&Aのポイント
  • バッチファイルを使用して、特定の日付以降のフォルダを別の場所にコピーする方法について教えてください。
  • ルートディレクトリの直下には、複数のフォルダがあり、フォルダ名はyyyymmdd形式の日付です。
  • 引数として指定された日付以降のフォルダをすべて指定した場所にコピーするバッチファイルを作成したいです。for /dループを使用する必要があると思いますが、具体的な方法を教えてください。
回答を見る
  • ベストアンサー

バッチファイル作成で困っています

ルートディレクトリの直下に、たくさんのフォルダが存在し、 すべてのフォルダ名がyyyymmdd形式の日付になっています。 例えば c:\20211215 c:\20220123 c:\20220302 c:\20220419 c:\20220524 ちなみに、本日の日付を表すフォルダ名が一番数字が大きいものです。(つまり未来の日付のものはありません) バッチファイルに引数を入れて、引数で指定した数字以降のものだけ すべてc:\workの下にフォルダごとxcopyするバッチファイルは どう作れば良いのでしょうか。 例えば、引数が20220225ですと、上記の例ではxcopyの対象は c:\20220302 c:\20220419 c:\20220524 の3つになります。 for /d ループになるように思いますが、お知恵(サンプル)をいただきたく。

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

  • ベストアンサー
回答No.1

確かバッチファイルは計算ができなかったはずですので WSHなどの別のスクリプトを使うことをお勧めします。

HOKKAPOKKA
質問者

補足

if xxx geq %1 (echo true) else (echo false) とかを使うと聞きかじりましたが...

その他の回答 (4)

  • UY-Scuti
  • ベストアンサー率82% (14/17)
回答No.5

pushd C:\ for /f "delims=" %%i in ('dir /b /ad ^| findstr /r "[1-2][0-9][0-9][0-9][0-1][0-9][0-9][0-9]$"') do ( if "%%~nxi" geq "%~1" ( xcopy /e "%%i" "C:\Work\%%~nxi\" ) ) popd

  • JP002086
  • ベストアンサー率35% (1461/4161)
回答No.4

バッチファイルでは(dos形式?)無理かもしれませんが、powershellが実装されていると思いますので・・・・ 日付操作に関して参考になる所を紹介しておきます。 PowerShellの日付操作 https://qiita.com/ryosuke0825/items/06eae2e99f587b5275aa あとは、MOVEでもcopyでもxcopyでも目的に沿うコマンドを使用する場合のを探して組み込んでみては如何でしょうか? ご参考にどうぞ

回答No.3

再度回答します。 WSH(Windows scripting Host)はバッチファイルの代わりに開発された言語です。実際の言語はJavaScriptです。 コマンドプロンプトからWSH スクリプトファイル名 引数 という形で呼び出せるので可能です。 ですが、windows98から存在していたWSHもずいぶん古い実装です。資料とかも少ないかもしれません。組み方は忘れてしまいました。 今ならもっとスマートな実装があるかもしれませんね。 同様の呼び出し方でPHPを使うという選択肢もあります。 PHPといろんなライブラリをインストールして PHP スクリプトファイル名 引数 のような呼び出し方もできます。

回答No.2

再回答します。 たしかに比較で計算めいたことはできたかもしれませんが 今度はすでに作成されているフォルダ名を引数以外の方法で 取得する方法がなかったと思います。 WSHにはファイルシステムにアクセスするライブラリがあります。

HOKKAPOKKA
質問者

お礼

そうなんですか。ちなみにシステム上ではコマンドプロンプトしか使用を許されていないのですが、WSHというのはそれでも使えるのでしょうか。そしてWSHだとどういう記述になるのでしょうか。

関連するQ&A

  • FTPのバッチファイルで日付を引数で与えたい

    いつもお世話になっております。 FTPのバッチファイルに引数を与える良い方法をご存知ありませんか。 FTPの中では環境変数は使えないとのことですし、悩んでいます。 取得するファイルは日付毎のディレクトリに入っていて、取得後も日付毎のディレクトリに保管するので日付の指定が必要なのですが。 [ftpget.bat]------------------------------------------ ftp-s:ftpget.bat open ホスト名 ユーザー名 パスワード bin prompt cd /~対象ホストのディレクトリ~/YYYYMMDD/host1 !mkdir C:\YYYYMMDD lcd C:\YYYYMMDD mget *.txt quit ---------------------------------------------------- このYYYYMMDDの部分を、『ftpget.bat 20081125』のようにバッチを流す時の引数で与えたいです。 日付は3日前だったり昨日だったり今日だったりします。 今は直接ファイルを編集してYYYYMMDDの部分3箇所を手で直してからバッチファイルを叩いています。 よろしくお願いいたします。

  • バッチファイル作成について

    いつも参考にさせております。 バッチファイルで指定したディレクトリとそのディレクトリに含まれるサブディレクトリやファイルを全て削除したいと思っております。 例えば… 削除したいフォルダ:binフォルダ、objフォルダ フォルダ構成:C:\Documents and Settings\Kumagai\My Documents\Visual Studio 2005\Projects\WindowsApplication1 WindowsApplication1の直下にサブディレクトリが何個かありその直下にそれぞれbinフォルダ、objフォルダが存在します。 サブディレクトリが10個の場合binフォルダ、objフォルダもそれぞれ10個あるとします。 なおサブディレクトリの数は可変です。 この時、binフォルダとobjフォルダを一遍に削除するにはどのようにバッチファイルに記述すればよろしいのでしょうか? よろしければ教えてください。 環境はWindowXPですが、Vistaにも対応できるとなおうれしいです。

  • バッチでの応答キー記載方法

    しょうも無い質問で申し訳ないです^^; 下記バッチファイルを実行しバックアップのタスクを作成しているのですが、実行中、 『E:\ggg\061014は受け取り側のファイル名ですか、またはディレクトリ名ですか(F= ファイル、D= ディレクトリ)?』 と表示されるところで止まってしまいます。 ここでは"D"を入力して先へ進むようにするようにするにはどうしたら良いのでしょうか? またなぜかデスクトップに日付名フォルダが出来てしまいます。(中身は空です)それもできないようにしたいのですが、どこが間違っているのかわかりません。ご教授願います。 <バッチファイル> set ymdtmp=%DATE:/=% set yyyymmdd=%ymdtmp:~2% cd e:\aaa md %yyyymmdd% xcopy /s /e /v c:\ddd\eee\*.* e:\ggg\%yyyymmdd%

  • バックアップ(世代管理)機能のバッチファイルを作成したい

    バッチでバックアップファイルを作成したいです。 機能は下記のとおりです。  ・バックアップを毎営業日(平日)とる  ・3世代保存する  ・バックアップ処理成功後、最も古いバックアップを削除する まず、システム日付を取得して、YYYYMMDDフォルダを作成し、その配下に保存したいのです。 でもYYYYMMDDフォルダの作成方法がわかりません。 次に、システム日付より3日以上古い日付を見つけて、該当するものがあったら削除するようにしたいです。 書籍やこのサイトでいろいろ調べているのですが、わからなくて・・・。 このサイトではバッチではシステム日付YYYYMMDDでディレクトリを作成することは出来ない・・・という回答がありましたが、やはり不可能なのでしょうか? ご回答いただきたくよろしくお願いします。

  • バッチコマンドを作りたい

    MS-DOSでのバッチコマンドについての質問です。 パスを引数で指定して、そのパスのディレクトリ以下(サブディレクトリも含む)のファイル名を全て取得し、加工して表示するバッチを作りたいのですが・・。 例えばコマンド名を jcm をすると C:\>jcm C:\temp と入力すると(「C:\temp」は引数)、C:\temp以下(サブフォルダも含めて)にある全てのファイル名を取得し、ファイル名がA.txt,B.txtだったとすると java A.txt java B.txt のように加工して表示したのです。 バッチファイルの中身はどのように記述すればよいでしょうか?

  • windowsバッチファイルで実行フォルダ移動

    お世話になります。王次郎です。 windows7 バッチファイルで、引数で渡されたファイルまたはフォルダの ディレクトリにカレントディレクトリを変更したいです。 方法を教えてください。 ・ 引数(%1%)が無いときは、カレントディレクトリはバッチファイルのあるディレクトリのままにします ・ 引数(%1%)がフォルダのときは、カレントディレクトリをその引数のフォルダにします CD %1% ・ 引数(%1%)がファイルのときは、そのファイルの置かれているディレクトリを抽出して その抽出したディレクトリに移動します よろしくお願いします。

  • バッチファイルの作成方法

    バッチファイルの初心者です。 下記のようなバッチを作成したいと思っています。 (1)本日の日付のディレクトリを作成する。 (2)そのディレクトリに数時間毎に作成される***.logを全て移動する。 (3)3日前に作成したディレクトリを削除する。 以上のような流れのバッチファイルは簡単に作成できるのでしょうか?

  • コピーバッチについて

    c:\にある全てのフォルダの中身を検索して拡張子『.xls』のフィルをd:\にコピーするバッチを作ろうとしています。 xcopy "c:\*.xls" "d:\" /r /y このままだとcドライブの直下にある『.xls』のファイルしかコピーしてくれません。(当たり前ですが・・) 色々考えているのですが、いい方法がどうしても思いつきません。まだまだ勉強足らずです。 どなたかご助力頂ければと思います。 宜しくお願いします。

  • IEで接続したサーバ内のバッチファイルを実行したい

    IIS8で仮想ディレクトリを作り、そのディレクトリの参照を有効にする設定にしました。 クライアントからIEでディレクトリの一覧を見ることができるようなったので、そのディレクトリの中のバッチファイルを実行することで、クライアントのPCに、あるソフトが入るようにしたいです。 仮想ディレクトリ(フォルダ名を「A」とします)のフォルダの構成は、フォルダ「A」の直下にあるフォルダ「B」の中に「123.exe」、フォルダ「A」の直下にあるフォルダ「C」に「環境設定.aen」、フォルダ「A」の直下にあるフォルダ「D」には「123.bat」が入っています。 「123.bat」は、「123.exe」を実行した後、PCを再起動させるバッチファイルです。 「環境設定.aen」は、「123.exe」を実行してインストールされるソフトの環境設定のファイルです。 フォルダ「A」 |-フォルダ「B」 | |-123.exe | |-フォルダ「C」 |   |-環境設定.aen | |-フォルダ「D」 |   |-123.bat サーバーは、Windows Server 2012 です。 現在、123.batを実行しようとすると、「404-ファイルまたはディレクトリが見つかりません。」とエラーが出ます。バッチファイルではなく、直接「123.exe」を実行すると、ファイルのダウンロードが始まり、困っています。 質問したいのは、そもそもIEで接続したサーバーのフォルダ内のバッチファイルやexeファイルを実行して、クライアントのPCにソフトをインストールすることはできるのでしょうか? もし、できるのでしたら、方法は問いませんので、こういうやり方があるよというのを教えていただけないでしょうか? よろしくお願いいたします。

  • シンボリックリンク作成のバッチファイル

    親フォルダーに、aフォルダーとbフォルダーが入っています。 aフォルダー配下には、xフォルダーがあり、その中には複数のテキストファイルが入っています。 parent\a\x\test.txt parent\b\ 以下の様なバッチファイルを「送る」に登録しました。 @echo off rem 選択ディレクトリ配下のxディレクトリに移動 cd /D %1\x\ rem カレントディレクトリにあるすべてのファイルを、bディレクトリにコピー for %%i in (*.*) do ( copy "%%i" "..\..\b\" ) これにより、aフォルダーを選択してバッチファイルを実行すると、xフォルダー配下のテキストファイルがbフォルダーの中にコピーされることは確認しました。 ここで、コピーではなく、シンボリックリンク(mklink)を作成したいのですが、引数をどのように設定すればよいでしょうか。いろいろ試しましたがうまくいきませんでした。 ご教示よろしくお願いします。