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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

2回答

951閲覧

バッチ内インクリメント

kotakeshi0923

総合スコア28

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2018/07/26 06:31

編集2018/07/26 06:54

バッチファイルでインクリメント処理を行おうとしていますが、以下の記述の処条件を満たしてもEXITされず、new_file.txt内のレコードがすべて表示されてしまいます。
本来であれば、%count%にある数字がはいっていて、それよりもlinesが大きくなった場合に
処理をやめるif文を作成したのですが、処理が終了されずすべてのレコードが出力されてしまいます。

for /f %i in (new_file.txt) do (if !lines! lss %count% ( echo %i & set /a lines=lines+1))

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

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

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

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

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

guest

回答2

0

ベストアンサー

for変数が、%i%が1つであることからして、バッチファイルにするのでなく、コマンドプロンプトに直接打ち込んでいる物と思いますが、そのコマンドプロンプトは、cmd /v:onと遅延環境変数展開を有効にして起動した物でしょうか?
デフォルトだと、遅延環境変数展開は無効になっているので、!lines!はそのままの文字列と見なされて、文字列比較で!は数字より小さいのでifは常に真になります。

投稿2018/07/27 03:47

otn

総合スコア84555

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

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

kotakeshi0923

2018/07/27 04:32

インクリメントされた数値は出力されないようになりましたが、まだechoの結果が出力されます。結果を添付致します。 C:\Users\takeshi>echo %count% 17 C:\Users\takeshi>echo %lines% 0 C:\Users\takeshi>for /f %i in (new_file.txt) do (if !lines! lss %count% ( echo %i & set /a lines=lines+1)) C:\Users\takeshi>(if !lines! LSS 17 (echo new_file.txt & set /a lines=lines+1 ) ) new_file.txt 1 C:\Users\takeshi>(if !lines! LSS 17 (echo NTUSER.DAT & set /a lines=lines+1 ) ) NTUSER.DAT 2 C:\Users\takeshi>(if !lines! LSS 17 (echo ntuser.pol & set /a lines=lines+1 ) ) ntuser.pol 3 C:\Users\takeshi>(if !lines! LSS 17 (echo %BAT_LOG% & set /a lines=lines+1 ) ) %BAT_LOG% 4 C:\Users\takeshi>(if !lines! LSS 17 (echo sap_delivery_data_before & set /a lines=lines+1 ) ) sap_delivery_data_before 5 C:\Users\takeshi>(if !lines! LSS 17 (echo ntuser.ini & set /a lines=lines+1 ) ) ntuser.ini 6 C:\Users\takeshi>(if !lines! LSS 17 (echo NTUSER.DAT{e7cdd284-74ea-11e8-a2dd-00059a3c7a00}.TM.blf & set /a lines=lines+1 ) ) NTUSER.DAT{e7cdd284-74ea-11e8-a2dd-00059a3c7a00}.TM.blf 7 C:\Users\takeshi>(if !lines! LSS 17 (echo NTUSER.DAT{e7cdd284-74ea-11e8-a2dd-00059a3c7a00}.TMContainer00000000000000000002.regtrans-ms & set /a lines=lines+1 ) ) NTUSER.DAT{e7cdd284-74ea-11e8-a2dd-00059a3c7a00}.TMContainer00000000000000000002.regtrans-ms 8 C:\Users\takeshi>(if !lines! LSS 17 (echo NTUSER.DAT{e7cdd284-74ea-11e8-a2dd-00059a3c7a00}.TMContainer00000000000000000001.regtrans-ms & set /a lines=lines+1 ) ) NTUSER.DAT{e7cdd284-74ea-11e8-a2dd-00059a3c7a00}.TMContainer00000000000000000001.regtrans-ms 9 C:\Users\takeshi>(if !lines! LSS 17 (echo ntuser.dat.LOG2 & set /a lines=lines+1 ) ) ntuser.dat.LOG2 10 C:\Users\takeshi>(if !lines! LSS 17 (echo ntuser.dat.LOG1 & set /a lines=lines+1 ) ) ntuser.dat.LOG1 11 C:\Users\takeshi>(if !lines! LSS 17 (echo VirusCheck.txt & set /a lines=lines+1 ) ) VirusCheck.txt 12 C:\Users\takeshi>(if !lines! LSS 17 (echo A5M2.ENG & set /a lines=lines+1 ) ) A5M2.ENG 13 C:\Users\takeshi>(if !lines! LSS 17 (echo A5M2.ENU & set /a lines=lines+1 ) ) A5M2.ENU 14 C:\Users\takeshi>(if !lines! LSS 17 (echo A5M2.exe & set /a lines=lines+1 ) ) A5M2.exe 15 C:\Users\takeshi>(if !lines! LSS 17 (echo history.txt & set /a lines=lines+1 ) ) history.txt 16 C:\Users\takeshi>(if !lines! LSS 17 (echo readme_en.txt & set /a lines=lines+1 ) ) readme_en.txt 17 C:\Users\takeshi>(if !lines! LSS 17 (echo readme.txt & set /a lines=lines+1 ) ) C:\Users\takeshi>(if !lines! LSS 17 (echo エクスポート.sql & set /a lines=lines+1 ) ) C:\Users\takeshi>(if !lines! LSS 17 (echo .gitconfig & set /a lines=lines+1 ) ) C:\Users\takeshi>(if !lines! LSS 17 (echo libbson-1.0.dll & set /a lines=lines+1 ) ) C:\Users\takeshi>(if !lines! LSS 17 (echo libmongoc-1.0.dll & set /a lines=lines+1 ) ) C:\Users\takeshi>(if !lines! LSS 17 (echo license_en.txt & set /a lines=lines+1 ) ) C:\Users\takeshi>(if !lines! LSS 17 (echo vcruntime140.dll & set /a lines=lines+1 ) ) C:\Users\takeshi>(if !lines! LSS 17 (echo concrt140.dll & set /a lines=lines+1 ) ) C:\Users\takeshi>(if !lines! LSS 17 (echo msvcp140.dll & set /a lines=lines+1 ) ) C:\Users\takeshi>(if !lines! LSS 17 (echo license.txt & set /a lines=lines+1 ) )
otn

2018/07/27 04:37

> まだechoの結果が出力されます readme_en.txtを最後に、以降は出力されてないように見えますが??
kotakeshi0923

2018/07/27 04:47

すみません。確認不足でした。echo以外にインクリメントの数値が表示されるのを非表示にするにはどうすればよいでしょうか?また、バッチで実行する場合にはどのようにすればよいでしょうか?
otn

2018/07/27 04:52

set /a の結果はNULにリダイレクトすればいいです。set /a lines=lines+1 >NUL バッチファイルにするには、forの前に setlocal enabledelayedexpansion を入れて遅延展開を有効にします。あと、%i を %%i に変更、先頭に @echo off など。linesの初期化も必要ですね。
kotakeshi0923

2018/07/27 05:03

できました!ありがとうございました。
guest

0

line = line+1
にしなければいけないんじゃないかと(ウロオボエ


WindowsのDOS(bat)プログラムではループ内での変数インクリメントに注意が必要です
こんなんみつけましたが、どうでしょうか

投稿2018/07/26 06:42

編集2018/07/26 06:50
y_waiwai

総合スコア87774

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

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

kotakeshi0923

2018/07/26 06:54

早速ご回答頂きありがとうございます。2点とも既に試しましたがNGでした。Windows10上で実施しています。
kotakeshi0923

2018/07/26 07:02

追加ですが、ディレクトリはリモートのwindowsファイルサーバー上に移って実行しています。 今ローカルで実施したら、うまくいきましたのでファイルをローカルにダウンロードして処理してみます。
kotakeshi0923

2018/07/26 07:19

間違いです。ローカルでもダメでした。やはりexitしません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問