アプリ版:「スタンプのみでお礼する」機能のリリースについて

当日日付のフォルダを作成し
base.txtというテキストファイルから
当日日付フォルダの中にID名のテキストファイルを作成。
ID名のテキストファイルには、IDとデータを格納
というbatファイルは作成可能でしょうか?
作成可能でしたら教えて頂ければ助かります。
宜しくお願いします。

base.txt     
 ID  データ      
 AAAA 111111
 AAAA 222222
 BBBB 111111
 BBBB 222222
    ↓
フォルダ:YYYYMMDD
AAAA.txt     
AAAA 111111   
AAAA 222222   

BBBB.txt
BBBB 111111
BBBB 222222

A 回答 (2件)

単純にそのデータであれば、以下のような感じで出来るかと思います。



―――――――――――――――――

@echo off

rem ■ カレントディレクトリの変更
pushd "%~dp0"

rem ■ 設定
set "出力フォルダ=%CD%\%date:/=%"
set "入力ファイル=%CD%\base.txt"

rem ■ フォルダ作成
md "%出力フォルダ%"

rem ■ カレントディレクトリの変更
pushd "%出力フォルダ%"

rem ■ テキストファイルにIDとデータを格納
for /f "tokens=1-2 usebackq delims=  " %%a in ("%入力ファイル%") do (
echo %%a %%b>> "%%a.txt"
)

―――――――――――――――――

ただ、2列目のデータに、半角記号やスペース関係の文字が使われている場合は、もう少し工夫が必要になるかと思います。

又、全角スペースと半角スペースが混在しているようですが、それを出力ファイルで再現する事も難しいかも知れません。

sed等の文字列を置換するフリーソフトを利用出来る環境であれば難しい事ではないのですが、企業などでフリーソフトが禁止されている環境だと、少し処理を考えないと難しいかも知れません。どうしても無理そうなら、もしかしたらPowerShell等の方が良いかも知れません。
    • good
    • 0

No.1です。



半角記号には対応出来ないという旨を書きましたが、No.1のバッチファイルの例では問題無かったです。失礼しました。訂正させて頂きます。

ただ、やはり処理を変更しますと、半角記号への対応がネックになってくる場合がありますので、半角記号やスペース関係の文字も含めて行をそのまま出力しようと思うと、以下のような感じで出来るかと思います。

―――――――――――――――――――

@echo off

rem ■ カレントディレクトリの変更
pushd "%~dp0"

rem ■ 設定
set "出力フォルダ=%CD%\%date:/=%"
set "入力ファイル=%CD%\base.txt"

rem ■ フォルダ作成
md "%出力フォルダ%"
md "TEMP"

rem ■ カレントディレクトリの変更
pushd "%出力フォルダ%"

rem ■ テキストファイルにIDとデータを格納

rem ◇ 1行をまるごと取り出して、一時ファイルに出力する
for /f "skip=1 usebackq delims=" %%a in ("%入力ファイル%") do (
echo %%a> "..\TEMP\今回の行.txt"

rem ◇ 出力した行の1列目を名前として、その行全体をファイルに保存する
for /f "tokens=1 usebackq delims=  " %%a in ("..\TEMP\今回の行.txt") do (
type "..\TEMP\今回の行.txt" >> "%%a.txt"
del /q "..\TEMP\今回の行.txt"
)

)

rem ■ 一時フォルダの削除
rd /q "..\TEMP"

―――――――――――――――――――

意味は、
「skip=1」=1行目を飛ばす
「usebackq」=「in」のファイル指定にダブルクォーテーションを使う
「delims=」=区切りとなる文字の指定
「tokens=1」=1列目を対象とする
という感じです。
    • good
    • 0
この回答へのお礼

迅速に対応していただきありがとうございました!
どちらの方法も試してみましたが、問題なく振り分けが出来ました!
急ぎで作りたかったので大変助かりました。
普段まったく勉強してない自分にガッカリです。
精進します。

本当にありがとうございました!

お礼日時:2018/11/02 12:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!