コマンドプロンプト初心者です。
毎月1日にタスクに設定したバッチを実行して、
フォルダの新規作成と古いフォルダの削除をしたいのですが、
処理をどのように考えたら良いか分かりません。
あるフォルダに
2011年7月,2011年8月,2011年9月という処理の対象のフォルダと
その他にいくつかフォルダがあります。
処理の内容としては、
10月1日になったら「2011年10月」というフォルダを作成し
3ヵ月前に作成された「2011年7月」フォルダを削除
いろいろ調べているのですが、
コマンドプロンプトだけで出来るのかどうかも分かりません。
どなたかアドバイスお願いします。
No.4ベストアンサー
- 回答日時:
No.2です。
100の意味ですが、年月(ym)をYYYYMMの6桁の数値にしています。例えば2011年7月なら ymには201107が入っています。
set /a yyyy=ym/100 ← 201107÷100=2011(ただし小数切り捨て)
set /a mm=ym%%100 ← 201107 mod 100=7(剰余;100で割ったあまり)
なぜこのようにするかというと、08とか09がset /aでエラーとなる事を回避するためです。(set /? のヘルプをご確認下さい)
つぎにloopのところですが、解説しようとして間違いに気づきました。
3月に実行すると0月となってしまいます。
わかりにくい所もあるので、バッチを以下のように訂正します。
これで説明した通りの式になっていると思います。
echo off
for /f "tokens=1-3 delims=/" %%d in ('date /t') do set ym=%%d%%e
:現在のフォルダ名
set /a yyyy=ym/100
set /a mm=ym%%100
set newf=%yyyy%年%mm%月
:3ヶ月前を求める
set /a mm = mm - 3
:0以下になるときは年/月を調整する
if %mm% LEQ 0 set /a mm = mm + 12 & set /a yyyy=yyyy-1
:3ヶ月前のフォルダ名
set oldf=%yyyy%年%mm%月
:フォルダ作成
if not exist "%newf%" md "%newf%"
:フォルダ削除
rd /s "%oldf%"
> set /a yyyy=ym/100 ← 201107÷100=2011(ただし小数切り捨て)
> set /a mm=ym%%100 ← 201107 mod 100=7(剰余;100で割ったあまり)
商が2種類あることを知りませんでした…
サンプル修正と解説ありがとうございました。
理解できました!
No.3
- 回答日時:
VBScript です。
Const rootDir = "d:\test\"
Dim fso
Set fso = CreateObject("Scripting.FileSystemobject")
If Not fso.FolderExists(rootDir) Then
WScript.Quit
End If
Dim delTargetPath
delTargetPath = fso.BuildPath(rootDir, Year(DateAdd("m", -3, Now)) & "年" & Right("00" & Month(DateAdd("m", -3, Now)), 2) & "月")
Dim newTargetPath
newTargetPath = fso.BuildPath(rootDir, Year(Now) & "年" & Right("00" & Month(Now), 2) & "月")
If fso.FolderExists(delTargetPath) Then
fso.DeleteFolder(delTargetPath)
End If
If not fso.FolderExists(newTargetPath) Then
fso.CreateFolder(newTargetPath)
End If
VBScriptで書くと、こうなるのですね。
勉強になります。
今回はコマンドで出来そうなので、機会があれば挑戦したいと思います。
ありがとうございました。
No.2
- 回答日時:
こんにちは。
No.1で紹介されたリンク先のページの制作者です。年月日まで絡むとリンク先のように月末処理で複雑な計算になりますが、
単に3ヶ月前の年月のみ計算するのはリンク先ほど複雑ではありません。
月から3をひいて、0以下にならなければそのまま。
0以下になったら12を足して、年を1ひくだけです。
稼働時の年月を取り出すには%date%を使うか date /t の出力を使います。
以下はサンプルです。
echo off
for /f "tokens=1-3 delims=/" %%d in ('date /t') do set ym=%%d%%e
:現在のフォルダ名
set /a yyyy=ym/100
set /a mm=ym%%100
set newf=%yyyy%年%mm%月
:3ヶ月前を求める
set /a ym=ym-3
:loop
set /a yyyy=ym/100
set /a mm=ym%%100
if %mm% GTR 12 set /a ym=ym -100 + 12&goto :loop
:3ヶ月前のフォルダ名
set oldf=%yyyy%年%mm%月
:フォルダ作成
if not exist "%newf%" md "%newf%"
:フォルダ削除
rd /s "%oldf%"
リンク先より簡単な計算で良いのですね。
コメント付きの分かりやすいサンプル、ありがとうございます!
変数の値を確認しました。すごいです…
サンプルについて質問なのですが、
:現在のフォルダ名 の計算の、100はどういう値なのでしょうか?
set /a yyyy=ym/100
set /a mm=ym%%100
:loop について。下の処理の部分だと思うのですが、
set /a ym=ym -100 + 12&goto :loop の意味が分かりませんでした。
月から3をひいて、0以下にならなければそのまま。
0以下になったら12を足して、年を1ひくだけです。
if %mm% GTR 12 set /a ym=ym -100 + 12&goto :loop
ご教示頂けないでしょうか?
よろしくお願いいたします。
No.1
- 回答日時:
たぶん可能だと思います。
たとえば、10月1日になったら「2011年10月」というフォルダを作成というのは、以下のような処理で可能です(10月1日になったらというより、とにかくなければ作るという考えで)。
SET FOLDER="C:\TEST"
SET YYYYMM=%DATE:~0,4%年%DATE:~5,2%月
IF NOT EXIST %FOLDER%\%YYYYMM% MKDIR %FOLDER%\%YYYYMM%
3ヵ月前に作成された「2011年7月」フォルダを削除というのも同様に、「2011年7月」フォルダが存在していれば削除でよさそうです。
ただし、以下などを参考に3ヵ月前の日付を計算する必要があるのと、「2011年7月」だとやりにくいので「2011年07月」というよに桁数は揃えたほうがいいと思います。
http://homepage1.nifty.com/jak/batch/date.html
※当然VBScriptなどのほうが簡単だとは思いますが。
回答ありがとうございます。
考え方としては「無ければ作る」なのですね。
フォルダ作成の方は、おかげさまで出来ました!
フォルダの削除については、URLを参考に頑張ってみます。
VBScriptのほうが簡単なんですね…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
bat ファイルでフォルダ作成&移動
-
フォルダ作成用バッチファイル...
-
Thunderbird ローカルフォルダ...
-
小次郎の記入項目のうちの転送...
-
Excelでdatファイルを作成??
-
batファイル処理でのテキストフ...
-
Microsoft Access エラー 3051
-
ブラウザでASPファイルを開こう...
-
複数のテキストファイルをexcel...
-
VBAでファイルパスが長すぎてコ...
-
ExcelVBA テキストファイルから...
-
【Excel VBA】PDFを作成して,...
-
FFFTPでサーバに新規フォルダが...
-
複数ファイルダウンロードについて
-
WindowsMediaのasfとasxの違いは?
-
ダウンロード不可PDFファイルは...
-
マルチモニタ環境でネットから...
-
バッチファイルが作成できない
-
複数のファイルを同時検索し、...
-
PowerPoint スライドの保存&メ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォルダ作成用バッチファイル...
-
bat ファイルでフォルダ作成&移動
-
Thunderbird ローカルフォルダ...
-
サンダーバードでの新規にフォ...
-
BIGLOBEのウェブリメールはフォ...
-
LANDISKに新しいフォルダを追加...
-
至急!バッチ作成について
-
コマンドプロンプトを使用して...
-
auoneのwebメールを使っている...
-
フォルダ階層が深いファイルの...
-
エクセルのマクロについて
-
Windows7 → Windows10にアップ...
-
MT4 Build600以降のカスタムインジ
-
FTPで、フォルダコピー
-
Excelでバックアップファイルを...
-
コマンドプロンプト
-
Wordで写真入りHTMLを作成した...
-
意味不明なフォルダが勝手に作...
-
新規フォルダが読み取り専用に...
-
デジカメ画像をパソコンに取り...
おすすめ情報