トップ回答者
一定期間で削除のバッチ【3】

質問
-
いつもお世話になっております。
先日も同様の内容で質問させていただいたものです。
下記が初回の質問です。
https://social.technet.microsoft.com/Forums/ja-JP/85f5c2c0-143a-4bde-abb7-4fd4077c9379/action?threadDisplayName=1996823450263993829112391210663850012398124961248312481
この初回の内容を元に理想の挙動をするバッチを作成出来たのですが、エラー時の対応が出来ておりませんでした。
エラーというのは該当フォルダが見つからなかった時に処理を中止するというものです。
下記が2回目の質問時のバッチの中身です。
------------------------------------------------------
pushd \\192.168.2.4\山田 太朗\Backup(tyamada)
forfiles /d -180 /s /c "cmd /c del /q @path"
popd
------------------------------------------------------
そこで、前回の質問ではif文の処理方法について教えていただき、対応しようと試みました。
しかし作成時に思ったのは何かの際にメンテナンスが大変そうだという部分で、やはりシンプルな内容で作成したいと思いました。
今回、私が構想した内容は最初にカレントディレクトリをcdで移動し、その後に上記の3行のコマンドを実施するというものです。
以前、上記3行のみでエラーを想定してテストを試みました。対象のフォルダが無かった時の挙動を確認しました。
すると、デフォルトのカレントディレクトリがバッチを実行したPCデスクトップだったのですが、デスクトップ上の条件に当てはまるファイル全てが消えました。
これを回避するには、カレントディレクトリを安全な場所へ移動してからの実行かと思います。そうすれば、複雑なif文も必要なくなるかと思います。
どこか、データが入っていないような安全な場所はありますでしょうか。(極論、自分でそういうフォルダを作成してそこにcdコマンドで飛ぶしかないかと思いますが)
cdコマンドには~\や\があるかと思いますが、これが具体的にどこのことを指すのかがわからなかったので、もしかして処理の為の仮想の場所等があったりするのかと思いました。
何卒よろしくお願いします。
2015年7月28日 0:47
回答
すべての返信
-
kkitaura さま よろしく。
しかし作成時に思ったのは何かの際にメンテナンスが大変そうだという部分で、やはりシンプルな内容で作成したいと思いました。
とありますが、実際に、コマンド内にフォルダ名を固定で書いている限り(所謂、ハードコード)、避けられません。
ヒントです。for /d %f in (*) do echo %f
を echo off で実行して見て下さい。 (カレントのディレクトリを変数に取得)
この echo %f の部分を、
今回のご質問のバッチで指定フォルダを変数(コマンドライン引数(パラメータ))に押し出したものに変更し、
これを呼び出せば OK です。
つまり、ふたつのバッチを作り、パラメータ %f 付きで 片方を Call しましょう。補足
ご提示のバッチ3行を、コマンドラインの引数でフォルダ名を指定する形に直します。
別のバッチを作ります。
\\192.168.2.4\ のフォルダを取得します。 for /d %f1 in (*)
各フォルダで Backup で始まるサブフォルダを取得します。 for /d %f2 in (Backup*)
フォルダ構成にもよりますが、 for /d /r %f in (Backup*) do echo %f で取れる気がします。 試して。
サブフォルダ下層に Backup で始まるフォルダがない場合。
問題なければ、% を %% に echo を call [バッチ名] %f に 換え、バッチにします。
- 編集済み ShiroYuki_Mot 2015年7月28日 6:24 補足追加
- 回答の候補に設定 佐伯玲 2015年7月30日 1:06
2015年7月28日 5:30 -
ooooh様
お世話になっております。
御連絡遅くなりすみませんでした。
まずooooh様の仰るように該当のフォルダを検索するコマンドの作成を始めました。
下記のサイトを見ると、パスの中に空白を使用しているとexistコマンドが使用できないようです。特にフォルダ参照でnulを使用したい
場合。
http://www.atmarkit.co.jp/ait/articles/0008/04/news002_2.html
そこで、そのサイトに書いてあるように以下の内容を考えました。
-------------------------------------------------------------------------------
echo off
dir "\\192.168.2.4\山田 太朗\Backup(tyamada)\nul" 2>nul | find "<DIR> .." >NULif not errorlevel 1 ( echo folder exist ) else echo Nothing
-------------------------------------------------------------------------------
しかし、これを実行したところ実行結果はNothingとなってしまいます。
UNCパスだと検索対象にならないのでしょうか。
御連絡お待ちしております。
- 編集済み mizuho524 2015年8月5日 4:09
2015年8月5日 2:06