如何在Windows批处理作业中访问环境变量?

Scr*_*Dev 2 cmd batch-file

我正在尝试从命令提示符中读取登录cridentials以执行一系列SQL*Loader脚本.
我能够看到使用set v_设置变量.但是,我无法访问这些值.

测试文件:

@echo off

set /P v_user = Username: 
set /P v_pass = Password: 
set /P v_db   = Database: 

ECHO Username: "%V_USER%"
ECHO Password: "%V_PASS%"
ECHO Database: "%V_DB%"

set v_

pause
Run Code Online (Sandbox Code Playgroud)

实际结果结果:

Username: 1    <-- Input
Password: 2    <-- Input
Database: 3    <-- Input
Username: ""  
Password: ""  
Database: ""  
v_db   =3  
v_pass =2  
v_user =1  
Run Code Online (Sandbox Code Playgroud)

预期结果结果:

Username: 1    <-- Input
Password: 2    <-- Input
Database: 3    <-- Input
Username: "1"  
Password: "2"  
Database: "3"  
v_db   =3  
v_pass =2  
v_user =1  
Run Code Online (Sandbox Code Playgroud)

有可能的使用:

@echo off

set /P v_user = Username: 
set /P v_pass = Password: 
set /P v_db   = Database: 

sqlldr %v_user%/%v_pass%@%v_db% CONTROL='TABLE_T1.ctl' log='logs/TABLE_T1.log' bad='bad/TABLE_T1.bad' skip=1
sqlldr %v_user%/%v_pass%@%v_db% CONTROL='TABLE_T2.ctl' log='logs/TABLE_T2.log' bad='bad/TABLE_T2.bad' skip=1

pause
Run Code Online (Sandbox Code Playgroud)

Ken*_*ite 6

删除=set语句中的空格:

echo off

set /P v_user=Username: 
set /P v_pass=Password: 
set /P v_db=Database: 

ECHO Username: "%V_USER%"
ECHO Password: "%V_PASS%"
ECHO Database: "%V_DB%"

set v_

pause
Run Code Online (Sandbox Code Playgroud)

另一种方法是更改​​ECHO语句以包含与变量名称和=符号之间使用的SET语句相同数量的尾随空格:

@echo off

set /P v_user = Username: 
set /P v_pass = Password: 
set /P v_db   = Database: 

ECHO Username: "%V_USER %"
ECHO Password: "%V_PASS %"
ECHO Database: "%V_DB   %"

set v_

pause
Run Code Online (Sandbox Code Playgroud)