将字符串转换为数字

时间:2013-01-23 09:04:03

标签: batch-file

我需要有关以下方面的帮助;

我有以下脚本:

SETLOCAL DisableDelayedExpansion

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

set /p stores=%%a )

stores.txt 的内容如下:

0010
0011
0012
etc.

我找到的解决方案是set /p stores=%%a

此输出:0010,0011,0012必须作为参数传递给sql.script

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

商店必须是数字值,因为在.sql脚本中会查询数值

所以结论是我需要一个数值而不是一个字符串。我怎么能这样做“转换”?

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

2 个答案:

答案 0 :(得分:4)

基本上,@ Bali C是正确的。大多数情况下,任何值都是cmd中的字符串值,除非上下文要求或建议区别对待。例如,在算术表达式中,值将自动转换为/视为数字。

但是,批处理脚本中的数字可以通过多种方式处理。特别是,根据数字的起始字符,可以将其视为

  • 十六进制值(前缀为0x时);

  • 八进制值(以0开头时);

  • 十进制值(在所有其他情况下)。

所以,如果你只是使用例如0010在预期数字的上下文中,该值将评估为8,因为0010是以cmd8为八进制表示的数字,十进制当量。这就是你会得到的,特别是,如果你只是这样做:

set /a stores=%%a

您可以使用以下简单技巧来摆脱前导0(从而避免将值视为八进制):

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

1置于开头将其转换为5位数字和十进制表示法编号。找到除以10000的除数后,只返回原始数字,但现在将前导0除去。

(注意:实际的模运算符是%,而不是%%,但由于算术上下文旁边的特殊含义,该字符必须加倍。) < / p>

答案 1 :(得分:0)

我认为cmd不会以不同的方式处理数字,除非你用它们算术。

我不确定它是否有任何区别,但您可以使用set /a为变量指定一个数字,所以请尝试使用

set /a stores=%%a