使用.csv文件中的数据作为批处理文件中选择命令的输入

使用.csv文件中的数据作为批处理文件中选择命令的输入,csv,batch-file,batch-processing,choice,Csv,Batch File,Batch Processing,Choice,我有一个简单的批处理可以写入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 %div

我有一个简单的批处理可以写入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命令选择一个发起人

就我所做的而言:

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变量存储为发起者名称。如何使用这两个变量作为choice命令的输入?

您需要稍微不同的方法。在评论中作了一些澄清之后。。我建议你在这里转向
set/p
,因为我们永远不知道会有多少个选项,你说最多20个,但明天突然有27个,然后呢?所以我宁愿安全也不后悔
:)


缺少用于打开
IF
命令的命令块的左括号。也不要在
SET
命令中使用空格。您创建了一个名为
b[space]
的变量,其值为
[space]value
。我不明白,请您解释一下,参数必须是发起人是什么意思?因此,您想先读取文件以获取所有单独的实体,然后在选择中使用它们?换句话说,如果文件中包含
A8-1
A8-2
A8-3
您想将它们作为选项读入吗?好的,这样做时会出现一些问题。文件中可以有多少条目?换句话说,一个用户可以有多少选择?谢谢!这就成功了!
@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
)