我需要以下方面的帮助;
我有以下脚本:
SETLOCAL DisableDelayedExpansion
for /f "delims=" %%a in (stores1.txt) do (
set /p stores=%%a )
Run Code Online (Sandbox Code Playgroud)
stores.txt的内容如下:
0010
0011
0012
etc.
Run Code Online (Sandbox Code Playgroud)
我找到的解决方案是 set /p stores=%%a
此输出:0010,0011,0012必须作为参数传递给sql.script:
sqlplus user/password@%database% @sqlscript.sql !stores! !data!
Run Code Online (Sandbox Code Playgroud)
存储区必须是数字值,因为在.sql脚本中将查询数字值
所以结论是我需要一个数字值而不是字符串。我该如何进行“转换”?
@echo off
setlocal enabledelayedexpansion
set stores=
PAUSE
for /f "delims=" %%a in (stores1.txt) do (
set /a stores=%%a
echo !stores!
)
pause
Run Code Online (Sandbox Code Playgroud)
基本上,@ Bali C是正确的。在大多数情况下,任何值都是字符串值,cmd除非上下文要求或建议以不同的方式对待它。例如,在算术表达式中,值将自动转换为数字/视为数字。
但是,批处理脚本中的数字可以用多种方式处理。特别是,根据数字以哪个字符开头,可以将其视为
十六进制值(当前缀为时0x);
八进制值(以开头0);
十进制值(在所有其他情况下)。
因此,例如,如果您仅0010在需要数字的上下文中使用,则该值将评估为8,因为它0010是八进制表示形式的数字,cmd并且8是其十进制等效形式。如果您只是简单地做到这一点,那将是您将得到的:
set /a stores=%%a
Run Code Online (Sandbox Code Playgroud)
您可以使用以下简单技巧来消除前导0(从而避免将该值视为八进制):
set /a "stores=1%%a %% 10000"
Run Code Online (Sandbox Code Playgroud)
将1开头放在也会将其转换为5位数字,也将其转换为十进制表示法数字。求除以10000的余数,您将只得到原始数,但是现在去除了前导0。
(注意:实际的模运算符%不是%%,但是字符必须加倍,因为它在算术上下文之外具有特殊含义。)
| 归档时间: |
|
| 查看次数: |
26778 次 |
| 最近记录: |