• 締切済み

FOR コマンド書き方

windows10 バッチファイル 文字列"あいう"の長さを得ます。 SET C=あいう SET K=%C% :S IF NOT "%K%"=="" ( SET K=%K:~1% SET /A L=%L%+1 GOTO :S ) ECHO LEN(%C%)=%L% これを FOR コマンドでは どう書くのか、教えて下さい。

みんなの回答

  • UY-Scuti
  • ベストアンサー率85% (17/20)
回答No.4

方法としては、質問者さんのやり方の、1文字ずつ削ってカウントするか、文字数のカウントの部分だけ補助的に他のスクリプト言語でやって、それを変数で受け取る。 ・・・ぐらいになると思います。 for を使っても、結局1文字ずつ削って、if で判定する事になるので、意味は無いです。 ------------------------------------------------------ PowerShell を補助的に使う。 @echo off set c=あいう powershell -c "exit '%c%'.Length" echo LEN(%c%)=%errorlevel% ------------------------------------------------------ JScript を補助的に使う。 @if(0)==(0) echo off set c=あいう cscript //E:JScript //nologo "%~f0" %c% echo LEN(%c%)=%errorlevel% exit /b @end var args=WScript.Arguments(0); WScript.Quit(args.length); ------------------------------------------------------ (いずれもバッチファイルの保存時の文字コードは、ANSI か Shift_JIS で。) よく、PowerShell は、重いとおっしゃる方がいますが、最近のパソコンで、NVMe 接続のSSD、メモリー 8GB、CPU が PassMarkベンチで 6000 程度あればストレスは感じません。 重いとおっしゃる方は、自分のパソコンは貧弱だと言っているようなものです。

  • asciiz
  • ベストアンサー率70% (6803/9674)
回答No.3

>そうですか??? >FOR で、結構いろいろやるみたい。 そうですよ FORで回すものがファイル名に限られているところがネックです。 とりあえず SET L=0 FOR %%f in (あ い う) DO SET /A L=%L%+1 echo %L% このように書いてみると、きちんと「SET /A L=%L%+1」は3回実行されましたが、環境変数Lは増えてくれません。 となると、FORによるカウントは無理そうです。 またその前段、「あいう」という文字列を「あ い う」に分割する方法もちょっと思いつきません。 文字数分の分割が出来れば良いので、「あいう あい あ」みたいな分割でもいいんですが。それをするためにはご質問のような IF-GOTO によるループを作るなどする必要があり、「FORを使って短く書く」という意趣に反しています。 -- バッチなんてのはあくまでも一連のコマンドラインを実行するという目的の物であって、まともなプログラミング言語だと思って使おうとしても苦労するだけです。 まあその苦労も面白かったりはしますが。 今回のお題は無理なのでは…?

  • kteds
  • ベストアンサー率42% (1882/4440)
回答No.2

Win10標準のPowerShellを使いましょう。 添付画像参照。 文字数のカウントは・・・ "あいう".length 結果は 3 が返ります。 バイト数のカウントは・・・ [System.Text.Encoding]::GetEncoding("Shift_Jis").GetByteCount("あいう") 結果は 6 が返ります。

ikibou
質問者

補足

ありがとうございます PS はややこしくて、、 しかも動作が遅くて、、 手を出しません。

  • asciiz
  • ベストアンサー率70% (6803/9674)
回答No.1

Windows (DOS)コマンドプロンプトのバッチファイルっていうのは、まともなプログラミング言語ではありません。 FOR命令も、一般的なプログラミング言語における繰り返し命令ではなく、『用意されたファイル名リストの一つ一つに対してコマンド処理を実行する』というための繰り返し命令なので、文字列長を数えるなんてことに使おうとするのは超邪道です。というか無理な気がします。 以下に、HELP FOR コマンドによって表示されるヘルプ(一部を引用しておきます。 ---- HELP FOR ---- 指定されたコマンドをファイル セットの各ファイルに対して実行します。 FOR %変数 IN (セット) DO コマンド [コマンドパラメーター] %変数 単一文字の置き換え可能なパラメーターを指定します。 (セット) ファイル セットを指定します。ワイルドカードを使用できます。 コマンド 各ファイルごとに実行するコマンドを指定します。 コマンドパラメーター 指定されたコマンドのパラメーターまたはスイッチを指定します。 バッチ プログラムで FOR コマンドを使用するときは、%変数の代わりに、 %%変数を使用してください。変数名では大文字と小文字が区別されるため、 %i と %I は異なります。 ---- 以下略 ---- (全部見るにはコマンドラインから「HELP FOR」を実行してください

ikibou
質問者

補足

そうですか??? FOR で、結構いろいろやるみたい。

関連するQ&A

専門家に質問してみよう