2

我有一个数字变量(在 oracle DB 中存储为 VARCHAR2 以满足某些业务需求)。批处理文件从用户那里接受这个变量,用户必须输入一个数字。

我希望批处理文件检查用户是否没有输入字符,如果是,则将控制重定向到用户必须输入数字变量的输入开始。

在没有输入的情况下,这个数字的默认值在调用存储过程时分配。

到目前为止,我有以下代码:-

}:enter_input
set nullinp=
set input=
echo.
set /P input="Enter the input (default size is 50): "
echo.
if "%input%"=="%nullinp%" (
set /A input= -1)

:validate_input
echo select to_char('%input%') from dual; > %dir%\validate_input.txt
echo exit >> validate_input.txt

echo "%dbpwd%" | %connStr% @%dir%\validate_input.txt > %log%\validate_input.log

findstr "ORA-" %log%\validate_input.log
if %ERRORLEVEL% NEQ 0 goto message1
if %ERRORLEVEL% EQU 0 goto catch_error

:catch_error
   cls
   echo.  
  echo "ERROR ==> Check no entered"
  echo 
  echo.
  echo.
  goto enter_input

我想在上面添加条件以检查输入的输入是否包含任何字符值,然后控件必须返回:enter_input。

谢谢。

4

3 回答 3

2

尝试这个:

echo(%input%|findstr "^[0-9-][0-9]*$" >nul && echo only numbers || goto:enter_input
于 2013-06-10T18:39:46.217 回答
0

如果您可以使用外部实用程序,我会推荐我编写的名为 EditV32.exe(或 64 位 Windows 的 EditV64.exe)的小程序。它可以将用户输入读取到环境变量中,并且它还具有-n选项以仅强制数字输入。你可以在这里下载:

https://westmesatech.com/?page_id=19

例如:

set INPUT=
editv32 -p "Enter the input (default size is 50): " -n
if %ERRORLEVEL% EQU 2 set INPUT=50

退出代码 2 表示用户在未输入任何内容的情况下按下 ENTER,因此在这种情况下,您将分配值 50。

另请注意,如果您使用的是 64 位版本的 Windows,则应使用 EditV64.exe 而不是 EditV32.exe。

账单

于 2013-06-10T18:37:32.650 回答
0

PowerShell 示例:

do {
  $response = Read-Host "Enter the input (default size is 50): "
  if ( $response -eq "" ) {
    $size = 50
  }
  else {
    $size = $response -as [Int]
  }
  if ( -not $size ) {
    Write-Host "Invalid size"
  }
}
until ( $size -gt 0 )
"You entered: $size"
于 2013-06-10T20:21:14.950 回答