初めまして。よろしくお願いします。
コマンド初心者 & 初書き込みタケブーです。
早速ですが、バッチ作成についての質問です。
"D:\temp\"に下記のようなファイルが毎日100件程度出力されます。
「AAA_20090430121212.log」
「BBB_20090430121212.log」
「CCC_20090430121212.log」
「AAA_20090430131212.log」
「BBB_20090430131212.log」
「CCC_20090430131212.log」
・
・
「○○○_YYYYMMDDHHMISS.log」
・
・
「AAA_20090701122212.log」
「BBB_20090701122212.log」
「CCC_20090701122212.log」
このファイルを対象月の"D:\temp\YYYYMM"フォルダに移動し、
さらに対象日の"D:\temp\YYYYMM\YYYYMMDD"フォルダに移動したいと
考えております。
未来の月日のフォルダは作成したくありません。
そのため、ファイル名を参照し、
フォルダを作成するようにしたいのです。
また、当日分のファイルは移動対象とはしたくありません。
if文、for文を使用して何とかしようとしたのですが
うまくいきません。
ご指導のほどよろしくお願いします。
No.1ベストアンサー
- 回答日時:
何がどううまく行かないのかを書いてくれないと。
想像するに、Unix/Linuxのシェルスクリプトのように1ファイルでどうにかする事にこだわっているのではないでしょうか?
(相当習熟している人なら書けるかも、ですが)
1ファイルにこだわらないのであれば、mainとsubでバッチを2本作ってはどうでしょう?
◆mkdir_move_sub.bat
引数のファイル名を元にフォルダ作成&移動
◆mkdir_move_main.bat
for文でdirの内容をサブに渡してやる
mkdir_move_sub.batの内容(ここから)
REM --------------------------------
@echo off
d:
cd d:\temp
REM 引数1の内容をセット
set filename=%~1
REM 引数の内容から年月を取得
set YYYYMM=%filename:~4,6%
REM 引数の内容から年月日を取得
set YYYYMMDD=%filename:~4,8%
REM 今日の日付を取得(書式は環境依存なので注意!)
set TODAY=%DATE:/=%
REM 日付が今日だったらフォルダ作成せず終了
if "%YYYYMMDD%" == "%TODAY%" goto endbatch
REM フォルダが存在しない場合は作成
if not exist "%YYYYMM%" mkdir "%YYYYMM%"
if not exist "%YYYYMM%\%YYYYMMDD%" mkdir "%YYYYMM%\%YYYYMMDD%"
REM ファイルを移動
move "%filename%" "%YYYYMM%\%YYYYMMDD%"
:endbatch
REM --------------------------------
mkdir_move_sub.batの内容(ここまで)
mkdir_move_main.batの内容(ここから)
REM --------------------------------
@echo off
d:
cd d:\temp
REM 今日の日付を除いたファイルから年月フォルダ作成し移動
FOR /F "usebackq delims==" %%i IN (`dir /b *.log`) DO @call mkdir_move_sub.bat %%i
REM --------------------------------
mkdir_move_main.batの内容(ここまで)
この回答への補足
ご回答いただいた内容を参考にして、無事解決できました。
ただ、ファイルの名前が、
「A_20090430121212.log」
「BB_20090430121212.log」
「CCC_20090430121212.log」
のように文字数に違いがあったので、新たに「IF」文を使って場合分けしました。
本当にありがとうございました。
ご回答のほど、ありがとうございます。
FOR /F "usebackq delims==" %%i IN (`dir /b *.log`) DO @call mkdir_move_sub.bat %%i
の部分でファイルが開けませんとなってしまいました。
また、「"usebackq delims"」 の意味、「IN (`dir /b *.log`)」の``など少々わからない部分がありました。
やはり、勉強不足です。
でも、考え方はわかったので、とても参考になりました。
もうちょっと考えてみて、週末にはまた結果をご報告します。
No.2
- 回答日時:
かなり適当ですが、たとえば以下などの内容で可能かもしれません。
@ECHO OFF
SET DNAME=D:\temp
FOR /F "tokens=1-4" %%A IN ('DIR %DNAME%') DO CALL :SUB %%D
GOTO :EOF
:SUB
IF NOT "%~x1" == ".log" EXIT /B
SET FNAME=%1
ECHO %FNAME:~4,8% %DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
IF "%FNAME:~4,8%" == "%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%" EXIT /B
IF NOT EXIST %DNAME%\%FNAME:~4,6% MD %DNAME%\%FNAME:~4,6%
IF NOT EXIST %DNAME%\%FNAME:~4,6%\%FNAME:~4,8% MD %DNAME%\%FNAME:~4,6%\%FNAME:~4,8%
MOVE %DNAME%\%FNAME% %DNAME%\%FNAME:~4,6%\%FNAME:~4,8%\
EXIT /B
この回答への補足
この度はご回答のほど、本当にありがとうございました。
他の方のバッチ内容のほうが私にはわかりやすかったので、そちらで解決できました。
時間がある時には是非こちらのバッチ内容を参考に、試してみますね。
ご回答ありがとうございます。
FOR /F "tokens=1-4" %%A IN ('DIR %DNAME%') DO CALL :SUB %%D
やはり私自身の「for」文のオプションの勉強不足ですね。ちょっと難しいです。
また、
IF NOT "%~x1" == ".log" EXIT /B
の"%~x1"この部分とかがわからないです。
でも会社の環境で同じようなものを見た覚えがあるので、見直してきます。
ありがとうございました。週末にちゃんと勉強して、ご報告します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ファイル一覧表を使ったファイルの移動 5 2022/08/10 15:37
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- 数学 対数関数のグラフ y=log(2)2(x+1)のグラフを書け 模範解答は「1+log(2)(x+1) 2 2023/07/08 01:51
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- Excel(エクセル) 【マクロ】ファイル名の日付によって、保管するフォルダを、自動選択したい 4 2023/08/16 11:24
- Excel(エクセル) 2つのマクロを連続して動かしたい 3 2022/09/20 23:46
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- 数学 回答者どもがなかなか答えられないようなので、考えてみました。 ∫[0,π/2]log(sinx)/( 4 2022/08/31 16:30
- UNIX・Linux LinuxMintが突然フリーズする 3 2022/05/26 09:30
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトで変数が数...
-
バッチファイルで、iniファイル...
-
バッチコマンドでファイル名の...
-
コマンドプロンプトでファイル...
-
[DOS] コピー先に同じファイル...
-
ftp処理でmove(移動)を行いたい
-
【バッチファイル】forコマンド...
-
VBA GetAttrについて教えてくだ...
-
ExcelVBAのDirでスペース含むフ...
-
【Access】エクスポート時のフ...
-
フォルダ内の更新日時が一番新...
-
VB6.0 Dir関数について
-
ファイル名に ” を使うと エク...
-
ファイルの削除でゴミ箱に送りたい
-
【VBScript】※渡したい変数のみ...
-
■ファイルのリネーム(rename)...
-
ExifToolでの文字化け対策
-
access,vbaでフォルダ内のファ...
-
サブフォルダからファイルをコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトで変数が数...
-
コマンドプロンプトでファイル...
-
バッチファイルで、iniファイル...
-
[DOS] コピー先に同じファイル...
-
バッチコマンドでファイル名の...
-
ftp処理でmove(移動)を行いたい
-
access,vbaでフォルダ内のファ...
-
ExcelVBAのDirでスペース含むフ...
-
フォルダ内の更新日時が一番新...
-
DOSのバッチ作成について‐FORの...
-
word VBA ファイル名 保存
-
ファイル名に ” を使うと エク...
-
.batでファイル名から抽出して...
-
ファイル名を該当フォルダ内か...
-
サブフォルダからファイルをコ...
-
【vbs】ファイル名の検索と該当...
-
【DOSバッチ開発】末尾のタブの...
-
VBA GetAttrについて教えてくだ...
-
バッチ処理で16進数でファイル...
おすすめ情報