質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

1回答

1255閲覧

「(の使い方が間違っています」というbatのエラー

fuu_0hagi

総合スコア2

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2024/01/04 06:20

編集2024/01/04 06:23

実現したいこと

不定期で作成するファイル名が日付のテキストファイルを作りたいです。
最後にファイルを作った日付がわかるように結果を2つのdatファイル(last.datとcurrent.dat)に出力したいです。

発生している問題・分からないこと

日付の名前のファイルは普通に作成でき、メモ帳で起動まではできるのですが、
日付をdatファイル(last.dat)に格納して現在の日付を別のdatファイル(current.dat)に格納しようとすると
「(の使い方が間違っています」というbatのエラーがでて困っています。

エラーメッセージ

error

1(の使い方が間違っています

該当のソースコード

bat

1@echo off 2 3rem todayfileの形式 e.g. 2024-01-04.txt 4rem 現在 current.datのなかみは 2023-12-12.txt 5 6set todayfile=%date:~0,4%-%date:~5,2%-%date:~8,2%.txt 7 8if not exist %todayfile% (copy nul %todayfile%) 9Start "" "C:\~\notepad.exe" %todayfile% 10 11set currentfile=<3current.dat 12if not %currentfile% == %todayfile% ( 13echo %currentfile% > last.dat 14echo %todayfile% > current.dat 15)

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

テキストファイルの中身を変数に収納する方法参考にしたのですが、うまくいきません。

補足

よろしくお願い致します

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

文法エラーのときは、@echo offを外して、どこが文法エラーなのか分かるようにします。
初心者の場合は、@echo offは完成後に付けるのがいいでしょう。

set currentfile=<3current.dat
どういう意図で書いたのでしょうか?

<ファイル名はリダイレクトで、<3current.datは、「3current.datという名前のファイルから読み込む」という意味ですが、読み込む先がないので、無意味です。
また、その文は、リダイレクト部分を取り除くとset currentfile=になり、currentfileには何も代入されないので未定義になり、
if not %currentfile% == %todayfile% (は、
if not == 2024-01-04.txt (となって、比較演算子が来るべき所に(が来たので文法エラーです。

どう直せば良いかは、

set currentfile=<3current.dat
どういう意図で書いたのでしょうか?

次第です。

current.datは質問文中に登場しますが、3current.datは登場しないので、もしかするとタイプミスをしていて、かつ、タイプミスに気づいてないと言うことですかね?

current.datと言う名前のファイルの中身(1行目)を変数に代入したいのであれば、setじゃなくてset /pです。
set /p currentfile=<current.dat

投稿2024/01/04 06:53

otn

総合スコア86281

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuu_0hagi

2024/01/05 16:43

全くおっしゃるとおりで、setではなくset /pでした、タイプミスも原因でした。 2点修正後動きました。回答ありがとうございました、とても助かりました。
otn

2024/01/06 01:27

タイプミスは誰でもする物で、それ自体は全然問題ないのですが、エラーに鳴っているにも関わらず、タイプミスに気づいてないのが問題かと思います。 何故発見できなかったのかを考えて、その弱点をどうやってカバーするか考えた方が良いでしょうね。 ・注意して何度も見直したが発見できなかった ・自分がタイプミスをするはずが無いのでタイプミスのチェックをしなかった など。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問