我需要有关以下方面的帮助;
我有以下脚本:
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
答案 0 :(得分:4)
基本上,@ Bali C是正确的。大多数情况下,任何值都是cmd
中的字符串值,除非上下文要求或建议区别对待。例如,在算术表达式中,值将自动转换为/视为数字。
但是,批处理脚本中的数字可以通过多种方式处理。特别是,根据数字的起始字符,可以将其视为
十六进制值(前缀为0x
时);
八进制值(以0
开头时);
十进制值(在所有其他情况下)。
所以,如果你只是使用例如0010
在预期数字的上下文中,该值将评估为8
,因为0010
是以cmd
和8
为八进制表示的数字,十进制当量。这就是你会得到的,特别是,如果你只是这样做:
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