質問: "C:\\Users\\Desktop\\test\\" + month + "月\\" + date + "_" + file_num + ".xlsx"; //ファイル作成 fs.copyFileSync(src, dest); } ```
回答: アヒルのおもちゃの人の回答で基本的にはうまく動作すると思いますが、 パズルとして考えた場合別のアプローチもありますね。 注目すべきコードはこれ。 `const filenames = fs.readdirSync("C:\\Users\\Desktop\\test\\11月");` そのディレクトリ配下のファイルの一覧ですね。 ``` // 基礎調査 "hogehoge".includes("hoge"); // true // だったらこういう結果取れるよね? filenames.filter(name => name.includes(date)); // ['20181108.xlsx', '20181108_2.xlsx', '20181108_3.xlsx'] // .lengthつければ同じ日付のファイルの数がわかるよね。 filenames.filter(name => name.includes(date)).length; // 3 // つまりこれで解決 const length = filenames.filter(name => name.includes(date)).length; const fileName = length === 0 ? `${date}.xlsx` : `${date}_${length + 1}.xlsx`; ``` ただし、この場合日付がxxxxxxxxという8桁の数字なので、 同じ日にファイルを2000万個生成するケースで不具合が出そうなので注意してくださいね。 ちゃんと見張るならfilter内部の関数の条件式をもう少し詳細にすると良いでしょう。 また、今回はディレクトリにファイルを追加するのがこのスクリプト1個の想定ですので、 手作業で今日はまだファイルが作られていないのに、`20181108_3.xlsx`というファイルを放り込んでしまった場合、私のロジックでは2度目の実行でファイルを上書きしてしまうと思うので一手間加える必要があります。 forやwhileを使ったループ文でファイルのありなしを見ていく場合はそういった事はないと思うので、思うようなやり方で実装してみてください。