3

次の点について助けが必要です。

次のスクリプトがあります。

SETLOCAL DisableDelayedExpansion

for /f "delims=" %%a in (stores1.txt) do (

set /p stores=%%a )

store.txtの内容は次のとおりです。

0010
0011
0012
etc.

私が見つけた解決策はset /p stores=%%a

この出力:0010,0011,0012にパラメータとして渡す必要がありますsql.script:

sqlplus user/password@%database% @sqlscript.sql !stores! !data!

.sql スクリプトでは数値が調べられるため、 storesは数値でなければなりません。

結論は、文字列ではなく数値が必要だということです。この「変換」を行うにはどうすればよいですか?

@echo off
setlocal enabledelayedexpansion
set stores=
PAUSE
for /f "delims=" %%a in (stores1.txt) do (
set /a stores=%%a
echo !stores!
)
pause
4

2 に答える 2

6

基本的に、@Bali C は正しいです。cmdほとんどの場合、コンテキストで異なる処理が必要または示唆されない限り、すべての値は文字列値です。たとえば、算術式では、値は自動的に数値に変換/数値として表示されます。

ただし、バッチ スクリプト内の数値は複数の方法で処理できます。特に、数字がどの文字で始まるかによって、次のように扱うことができます。

  • 16 進数値 (プレフィックスが の場合0x);

  • 8 進値 (a で始まる場合0);

  • 10 進数値 (その他の場合)。

したがって、たとえば0010数値が期待されるコンテキストで単に使用した場合、値は として評価さ80010ます。特に、単純にこれを行うと、次のようになります。cmd8

set /a stores=%%a

次の簡単なトリックを使用して、先頭の 0 を取り除くことができます (したがって、値が 8 進数として扱われるのを回避できます)。

set /a "stores=1%%a %% 10000"

を先頭1に入れると5桁の数字になり、10進数にもなります。10000 による除算の余りを見つけると、元の数値だけが返されますが、先頭の 0 が取り除かれています。

(注: 実際のモジュロ演算子は%ではなく%%ですが、算術コンテキスト以外の特別な意味があるため、文字を 2 倍にする必要があります。)

于 2013-01-25T18:03:28.207 に答える
0

算術演算を行わない限り、cmdは文字列とは異なる方法で数値を処理するとは思いません。

違いがあるかどうかはわかりませんが、を使用して変数に番号を割り当てることができるset /aので、を使用してみてください

set /a stores=%%a
于 2013-01-23T12:25:38.440 に答える