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

Posted

技术标签:

【中文标题】使用 .csv 文件中的数据作为批处理文件中选择命令的输入【英文标题】:Use data from a .csv file as input to choice command in batch file 【发布时间】:2021-07-23 03:54:28 【问题描述】:

我有一个简单的批处理写入 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 变量中存储发起者名称。如何使用这两个变量作为选择命令的输入?

【问题讨论】:

您缺少一个左括号来打开IF 命令的命令块。也不要在SET 命令中使用空格。您创建了一个名为 b[space] 的变量,其值为 [space]value 【参考方案1】:

您需要一种稍微不同的方法。在 cmets 中进行了一些澄清之后.. 我建议您在这里转向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
)

【讨论】:

我不明白,你能解释一下你所说的参数必须是始作俑者是什么意思吗? 所以您想先读取文件以获取所有单独的实体,然后在选择中使用它们?换句话说,如果文件包含 A8-1 A8-2A8-3 您想将它们作为选项读入吗? 好的,所以这样做时会出现一些问题。文件中可以有多少条目?换句话说,用户期望有多少选择?

以上是关于使用 .csv 文件中的数据作为批处理文件中选择命令的输入的主要内容,如果未能解决你的问题,请参考以下文章

使用批处理脚本,如何使用正则表达式拆分 .csv 文件中的数据?

如何使用Nodejs将数据作为文件夹中的文件名写入CSV文件

如何将 Thingsboard 中的时间序列数据作为 CSV 或 JSON 文件保存到外部文件系统? [关闭]

如何使用 csv 文件的列名作为输入选择?

将csv文件作为python中的变量读入

C#导入csv文件,数据中有逗号怎么处理