Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为Windows批处理文件提供从CSV文件提取的变量_Windows_Batch File - Fatal编程技术网

如何为Windows批处理文件提供从CSV文件提取的变量

如何为Windows批处理文件提供从CSV文件提取的变量,windows,batch-file,Windows,Batch File,我有一个3列多行的CSV文件 我想在Windows cmd提示符下运行命令,并从CSV文件向命令提供输入变量,例如: cd C:\mricrogl for /f "tokens=1-3 delims=," %%A in ('Q:\proc9\Code\dcm2bids.csv') Do Echo dcm2niix -b y -z y -o "%%~A" -f "%%~B" "%%~C" 我需要这个命令来迭代CSV文件的长度 CSV文件的内容如下所示(没有标题),这3列是dcm2niix命令

我有一个3列多行的CSV文件

我想在Windows cmd提示符下运行命令,并从CSV文件向命令提供输入变量,例如:

 cd C:\mricrogl
 for /f "tokens=1-3 delims=," %%A in ('Q:\proc9\Code\dcm2bids.csv') Do Echo dcm2niix -b y -z y -o "%%~A" -f "%%~B" "%%~C"
我需要这个命令来迭代CSV文件的长度

CSV文件的内容如下所示(没有标题),这3列是dcm2niix命令所需的输入变量%%~A%%~B和%%~C。该命令要求输入变量(即文件路径和文件名)使用双引号。当我在cmd提示符下“手动”一次执行一行时,该命令就会运行,因此for语句和读取CSV文件的形式使我无法开始工作

 "V:\Output\folder1", "filename1", "Q:\Input\folder1"
 "V:\Output\folder2", "filename2", "Q:\Input\folder2"
 "V:\Output\folder3", "filename3", "Q:\Input\folder3"

谢谢

假设您发布的代码和示例文件是准确的,那么您有两个不相关的问题

1)
IN()子句使用单引号,这意味着FOR/F将尝试执行csv文件,而不是简单地读取内容

你必须去掉单引号

for /f "tokens=1-3 delims=," %%A in(Q:\proc9\Code\dcm2bids.csv) do ...
如果csv路径有时可能包含空格,则该路径必须使用双引号,然后需要USEBACKQ选项

for /f "usebackq tokens=1-3 delims=," %%A in("Q:\proc9 with spaces\Code\dcm2bids.csv") do ...
2)
第二个问题是每个引用列值之前的前导空格。当值中的第一个和最后一个字符是引号时,
~
仅去除外部引号。您的第一个字符是空格,因此引号不会被删除

CSV无论如何都不应该有这样的前导空格

如果您控制了csv文件的创建,那么我将修复该代码以消除前导空格,然后一切都将正常工作

或者,您可以依赖源代码中已经存在的引号。但这只有在您知道引号始终存在的情况下才有效:

... Do Echo dcm2niix -b y -z y -o %%A -f %%B %%C
如果无法从源中删除空格,并且不知道引号是否始终存在,则可以为每个标记使用额外的FOR循环来忽略不需要的空格:

cd C:\mricrogl
for /f "tokens=1-3 delims=," %%A in (Q:\proc9\Code\dcm2bids.csv) do (
  for %%a in (%%A) do for %%b in (%%B) do for %%c in (%%C) do (
    echo dcm2niix -b y -z y -o "%%~a" -f "%%~b" "%%~c"
  )
)

您可以在每行的开头和结尾添加双引号,同时将每个逗号替换为双引号空格双引号。将您自己的代码附加到您编辑的问题和csv文件的示例行中
对于/f“tokens=1-3 delims=,”%%A in('type your.csv')Do Echo命令“%%~A”“%%~B”“%%~C”
可能就是您所需要的全部内容。我删除了Echo,一切正常。非常感谢@dbenham