使用 .csv 文件中的数据作为批处理文件中选择命令的输入
Use data from a .csv file as input to choice command in batch file
我有一个简单的批次要写入 C:\Program Files (x86)\Data\ori.csv 文件,其中包含以下信息:部门、发起人姓名
@echo off
CHOICE /C NS /M "Please Choose Division:"
echo.
if errorlevel 1 set division=A8-NN
if errorlevel 2 set division=A8-NS
:PROMPT
set /P ori= "Add %division% Originator? [(Y)=yes / (N)=No] "
IF /I "%ori%" NEQ "N" goto add (
) else (
goto exit
)
:add
set /p oriname= "Please Enter %division% Originator Name "
echo Division %division% Originator %oriname% has been Sucessfully added
echo %division%,%oriname% >>C:\%programfiles(x86)%\data\Ori.csv
echo.
goto prompt
:exit
pause
csv 的输出例如
A8-NN,Chris
A8-NN,Alfredo
A8-NS,Joe
A8-NN,Patrick
A8-NS,Ann
etc
这个 .csv 的数据将每 2 个月更改一次(每个部门分配新人员)
我的问题是我想在来自 ori.csv 文件的单独批处理文件中读取数据,并且对于特定部门使用选择命令来选择一个发起者
到目前为止我已经这样做了:
CHOICE /C NS /M "Please Choose Division:"
echo.
if errorlevel 1 set division=A8-NN
if errorlevel 2 set division=A8-NS
count=
for /f "tokens=1-20* delims=," %%a in ('type "C:\%programfiles(x86)%\data\Ori.csv"') do (
if %%a== ("%division%)
set b = %%b
set "count=!count!+1"
echo %count% %%b
)
)
我试图做的是在 %count% 变量中存储一个数字标识符,在 %b 变量中存储发起者姓名。我如何使用这两个变量作为选择命令的输入?
您需要一种稍微不同的方法。在评论中进行一些澄清后.. 我建议你在这里转向 set /p
,因为我们永远不知道会有多少个选项,你说最多 20 个,但明天突然有 27 个,然后呢?所以我宁愿安全也不愿后悔:)
@echo off & set cnt=0
setlocal enabledelayedexpansion
for /f "usebackq tokens=1* delims=," %%a in ("%programfiles(x86)%\data\Ori.csv") do (
if not defined %%a (
set /a cnt+=1
set "%%a=%%a"
set "!cnt!=%%a"
echo !cnt!. %%a
)
)
set /p "oper=Please choose Division (1 to !cnt!): "
if not %oper% gtr !cnt! (
set cnt=0
for /f "usebackq tokens=1-20* delims=," %%a in ("%programfiles(x86)%\data\Ori.csv") do if "%%a" == "!%oper%!" set /a cnt+=1 & echo !cnt! %%b
)
我有一个简单的批次要写入 C:\Program Files (x86)\Data\ori.csv 文件,其中包含以下信息:部门、发起人姓名
@echo off
CHOICE /C NS /M "Please Choose Division:"
echo.
if errorlevel 1 set division=A8-NN
if errorlevel 2 set division=A8-NS
:PROMPT
set /P ori= "Add %division% Originator? [(Y)=yes / (N)=No] "
IF /I "%ori%" NEQ "N" goto add (
) else (
goto exit
)
:add
set /p oriname= "Please Enter %division% Originator Name "
echo Division %division% Originator %oriname% has been Sucessfully added
echo %division%,%oriname% >>C:\%programfiles(x86)%\data\Ori.csv
echo.
goto prompt
:exit
pause
csv 的输出例如
A8-NN,Chris
A8-NN,Alfredo
A8-NS,Joe
A8-NN,Patrick
A8-NS,Ann
etc
这个 .csv 的数据将每 2 个月更改一次(每个部门分配新人员)
我的问题是我想在来自 ori.csv 文件的单独批处理文件中读取数据,并且对于特定部门使用选择命令来选择一个发起者
到目前为止我已经这样做了:
CHOICE /C NS /M "Please Choose Division:"
echo.
if errorlevel 1 set division=A8-NN
if errorlevel 2 set division=A8-NS
count=
for /f "tokens=1-20* delims=," %%a in ('type "C:\%programfiles(x86)%\data\Ori.csv"') do (
if %%a== ("%division%)
set b = %%b
set "count=!count!+1"
echo %count% %%b
)
)
我试图做的是在 %count% 变量中存储一个数字标识符,在 %b 变量中存储发起者姓名。我如何使用这两个变量作为选择命令的输入?
您需要一种稍微不同的方法。在评论中进行一些澄清后.. 我建议你在这里转向 set /p
,因为我们永远不知道会有多少个选项,你说最多 20 个,但明天突然有 27 个,然后呢?所以我宁愿安全也不愿后悔:)
@echo off & set cnt=0
setlocal enabledelayedexpansion
for /f "usebackq tokens=1* delims=," %%a in ("%programfiles(x86)%\data\Ori.csv") do (
if not defined %%a (
set /a cnt+=1
set "%%a=%%a"
set "!cnt!=%%a"
echo !cnt!. %%a
)
)
set /p "oper=Please choose Division (1 to !cnt!): "
if not %oper% gtr !cnt! (
set cnt=0
for /f "usebackq tokens=1-20* delims=," %%a in ("%programfiles(x86)%\data\Ori.csv") do if "%%a" == "!%oper%!" set /a cnt+=1 & echo !cnt! %%b
)