• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:バッチファイル作成で又また困っています。)

バッチファイル作成で過去の日付のCSVファイルを結合してFTPする方法

agricapの回答

  • agricap
  • ベストアンサー率40% (79/195)
回答No.2

〔質問1〕 各日付ディレクトリの下にあるファイルの一覧をすべて type で 出力したいのですが、それを一気にやるのがむずかしいので、 CDでカレントディレクトリを移して、 各日付ディレクトリごとにファイルの一覧を一時的に出力して その結果に対して内側のFOR文の実行しています。 ちょっと工夫すれば、CDもこの一時ファイルも不要になるかも しれません。あたり前ですがいろいろなやり方が考えられます。 ここは、もともとの質問文の dirlist.dat のやり方に習いました。 〔質問2〕 少々やっかいですが、以下のようにしてみてください。 理屈はあまりうまく説明できません。やってみたら、できた、という レベルです。 @echo off setlocal set TARGET_DIR=D:\Program Files\csv set OUT_DIR=D:\Program Files\CSVOUT DEL /Q "%OUT_DIR%\*" cd /d "%TARGET_DIR%" dir /ON /B > "%OUT_DIR%\dirlist.dat" FOR /F %%I IN ('type "%OUT_DIR%\dirlist.dat"') DO (   CD "%TARGET_DIR%\%%I"   DIR /ON /B > "%OUT_DIR%\dirlist2.dat"   FOR /F %%P IN ('type "%OUT_DIR%\dirlist2.dat"') DO (     TYPE %%P >> "%OUT_DIR%\%%I.CSV"   ) )

yazaemon
質問者

お礼

・早速有難うございます・ ""の使い方分かりました。私はset OUT_DIRの方ばかりやっていたのでOUTだった様です。 又〔質問1〕の説明有難うございました。「各日付ディレクトリごとにファイルの一覧を一時的に出力して」の説明で変数の役目が分かりました。 本当に有難うございました。

関連するQ&A

  • バッチファイル作成で困っています。こんな事出来ますか?

    ・仕事で初めてバッチファイルを作っていますが、CSVファイルの連番が思っていたのと違う為出来なくて困っています。どうか教えてください。 作業内容を記します。 〔内容〕  ・Logフォルダー内に今300件以上のCSVファイルが有ります。  (Logフォルダーの名前は日付で毎日0:00に更新され、yyyymmdd形式です。例:今日が6/22だと「20060623」)  ・Logフォルダー内のCSVファイルの名前はCL増設時以下の規則で付いています。(今後CL数が増えればCSVファイルの数も増加します。) CL0001  CL0010  CL0020 ・・・  ↓    ↓    ↓ CL0009  CL0019  CL0029 ・・・ CL000a  CL001a  CL002a ・・・  ↓    ↓    ↓ CL000f  CL001f  CL002f ・・・  ・0:00以降、上記CSVを全て1つのCSVファイルに結合し、名前を日付から1を引いて昨日の日付(例:「20060622」に変更して汎用Hostに0:30分にFTPで送ります。 ・昨夜DOS系のサイトを必死で検索し恥ずかしいのですが、以下の様な バッチを始めて作成したのですが、CSVファイルが16進で付いているのを知らずCL0001~CL0999で作ってしまいました。現在、a~fのところが自分ではどうして良いか全く分かりません。又、Error処理が検索サイトの解説を読んでも旨く出来ません。 〔バッチ〕 @echo off setlocal set da=%date:~0,4%%date:~5,2%%date:~8,2% set /a x=%da%-1 d: cd "D:\data\CL_Logs\Logs\%x% for /l %%n in (1 1 9) do type JL000%%n.csv >> %x%.csv for /l %%n in (10 1 99) do type JL00%%n.csv >> %x%.csv for /l %%n in (100 1 999) do type JL0%%n.csv >> %x%.csv ftp -s:c:\Logs_ftp.txt >> ftp.log endlocal ・CSVファイルのの「CLxxxx」の番号はCLが無くなると欠番になりますが、その処理は必要無いと思っています。 どうか宜しくお願いいたします。

  • バッチファイルにてファイル名指定移動

    下記の質問に近いのですが、質問させていただきます。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2094137 ファイル名にaaaとbbbという文字列が含まれるファイルを cccフォルダに移動する場合はどのように記載したらよいのでしょうか? よろしくお願いいたします。 ※以下は上記質問URLを参考にaaaという文字列のみが含まれるファイルをcccに移動するバッチです。 ======= @echo off findstr /L /M "aaa" *.send >filelist.dat IF %ERRORLEVEL% EQU 0 FOR /F "delims=" %%i in (filelist.dat) do move "%%i" ccc del filelist.dat =======

  • フォルダごとのファイル数を数えるためのバッチ

    フォルダごとのファイル数を数えるためのバッチをネットで調べて作成しました。 このバッチファイルを親フォルダ直下に配置し、ダブルクリックで実行しています。 ------------------------------------------------------------------------- @echo off setlocal enabledelayedexpansion set /a counter=0 dir %1 /ad /s /b >trash.csv for /f "tokens=1 delims=," %%i in (trash.csv) do ( set /a counter = 0 for %%A in (%%i\*) do ( if exist %%A ( set /a counter=counter+1 ) ) echo %%i : !counter! ) ------------------------------------------------------------------------- しかし、結果は、フォルダ名は取得していますが、ファイル数が取得できていません。 こんな感じです。 setlocal コマンドに無効なパラメータが指定されました d:\画像\フォルダ1 = 0 d:\画像\フォルダ2 = 0 d:\画像\フォルダ1\フォルダ3 = 0 どたなかどこが間違っているのかご指摘ください。

  • バッチファイルでの%を含むファイル名の取得

    以下はEドライブを走査してフォルダごとのjpgやpngなどのファイルの数を全て表示するバッチ処理ですが。基本的に上手く動きますが%を含むファイル名、フォルダ名に当たると上手く動きません。どうしたらいいでしょうか?”ファイル名、フォルダ名に%を使うな”という回答以外でお願いします。 @echo off pushd E:\ for /f "delims=" %%j in ('dir /b /s /a:d') do call :sub "%%j" exit /b :sub echo /////////////////////////////////////////////////////////////////////////// for /f "delims=" %%x in ('dir /b %1 ^| find /c ".jpg"') do call :jpg %%x for /f "delims=" %%x in ('dir /b %1 ^| find /c ".JPG"') do call :jpg2 %%x for /f "delims=" %%x in ('dir /b %1 ^| find /c ".png"') do call :png %%x for /f "delims=" %%x in ('dir /b %1 ^| find /c ".bmp"') do call :bmp %%x echo %1 echo jpg %jpg_c% echo png %png_c% echo bmp %bmp_c% echo JPG %jpg2_c% goto :EOF :jpg set jpg_c=%1 :echo %1 goto:EOF :jpg2 set jpg2_c=%1 :echo %1 goto:EOF :png set png_c=%1 :echo %1 goto:EOF :bmp set bmp_c=%1 :echo %1 goto:EOF :all set all_c=%1 :echo %1 goto:EOF

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

    バッチファイルを作成してファイルの結合(csvファイル)を行おうとしています。 ですが下記のような状況になってしまいどうにかならないかと思っています。 ***1.csv ***2.csv ***3.csv ***1.csv というような順番でデータがフォルダに転送されきてしまいます。 「1,2,3」までならば結合のバッチファイル作成が可能なのですが、 「1,2,3」の後に再度「1」のファイルが同フォルダにきた時には どのような文にすればイイのかお教え頂けますでしょうか。 下記に結合の文を記させて頂きます。 copy ***1.CSV+***2.CSV+***3.CSV+***_ADDALL.CSV d:\***\***_ALL.CSV 初めてバッチファイルというものを作成するので不明な点が多いのですが、宜しくお願い致します。

  • バッチで118項目のCSVを処理したいですが。。。

    バッチファイルで一行に、118項目のあるCSVファイルを読み込んで、必要な項目を抽出して、新しいCSVを作りたいです。 いろいろ調べたら for /f "delims=, tokens=1-3" %%I in (sample.csv) do ( echo %%I %%J %%K>> new.csv ) で実現できると思っていましたが、tokensに値の制限があって、tokens=1-118にすると、うまくいかないです。 どなたかいい方法をご存知でしたら、教えていただきたいですが。

  • バッチファイルについて質問させて下さい。

    下記のようなcsvファイルまたはテキストファイルに纏めた移行元パス、移行先パスの情報をfor /fで行毎に参照しコピー処理を行うバッチファイルを作成したいと考えているのですが頓挫しております。 出来るだけバッチファイルで実現したいのですが可能でしょうか。お手数ですがご教示下さい。 (コマンドはxcopyを想定しています。) ------file.csv---------- 移行元パス1,移行先パス1 移行元パス2,移行先パス2 ・        ・ ・        ・ ---------------------- for /f "delims=,"%%a in (file.csv) do xcopy %%a 上記では移行先が指定できないので動きませんでした。

  • Windows2000 バッチファイルコマンドについて

    こんにちは。 バッチファイルコマンド(DOSコマンド?)について質問があります。 まずやりたい事としては、 「前月日付のフォルダを自動作成したい」 です。 当月日付をもってくる為には以下の様なコマンドでできました。 for /f "tokens=1-2" %%l in ('date /t') do set today=%%l for /f "delims=/ tokens=1-2" %%a in ('echo %today%') do set yymm=%%a%%b このコマンドを実行すると、例えば、%yymm%には200507が入っています。 このコマンドを応用して、前月日付(200506)を取得したいのですが、何か言い方法はありませんでしょうか? また、新たなやり方あるのでしたら教えて頂けないでしょうか?

  • バッチでcsvファイルの指定のカラムを編集したい

    バッチでファイルの編集をしたい バッチファイルを使用して、csvファイルの読み込み~編集を行いたいと思っております 元ファイル:TEST_DATA.csv 内容: 111,222,333,444,555 123,456,789,321,987 上記のcsvファイルを読み込み、 ・5カラム目が987ならば3カラム目を654に変更する という処理を実行させたいのですが、 どのように行えばよいのでしょうか? 現在考えていることは、 1.for文を使用して指定のカラムを抜く(3カラム目と5カラム目を抜く)) 2.5カラム目の値をif条件に指定し、合致した場合、抜いた3カラム目の変数に654を入れる 3.654に変更した変数を3カラム目の値として入れる という順番で行えばいいと思っているのですが、 下記まで行ったところで行き詰ってしまいました for /F "tokens=3,5 delims=," %%i IN (TEST_DATA.csv) DO @(if %%j==987 set %%i=654 echo %i %j ) お分かりになられる方、ご教授願えませんでしょうか

  • batファイルでファイルの件数取得

    batファイルでカレントフォルダ内のCSVファイルの件数を取得したく、 以下のbatファイルを作成しましたが、件数が多いと若干のズレがでます。 どこがダメなのでしょうか?ご教授お願いします。 for /f "usebackq" 55i in(`dir /B /S *.csv`) do ( SET /P<NUL=%%i: type %%i | find /c /v "" )