Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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批处理或PowerShell在CSV文件中为空,则需要打印字段名_Powershell_Batch File - Fatal编程技术网

如果使用Windows批处理或PowerShell在CSV文件中为空,则需要打印字段名

如果使用Windows批处理或PowerShell在CSV文件中为空,则需要打印字段名,powershell,batch-file,Powershell,Batch File,我有一个分隔文件,如下所示: Field 0|Field 1|Field 2|Field 3|Field 4|Field 5 June 27 2017|5466|28998|52|3175507|1144121044 要确定哪个字段为空,需要使最内层循环中的输出具有条件。此外,用金丝雀字符串填充空字段的例程并不说明第一个或最后一个字段是空的 。。。 rem在行首和行尾添加分隔符,以允许检测空字符 rem第一个/最后一个字段。 设置“工时=|%%X |” rem将金丝雀插入空字段(运行两次以处理连

我有一个分隔文件,如下所示:

Field 0|Field 1|Field 2|Field 3|Field 4|Field 5 June 27 2017|5466|28998|52|3175507|1144121044
要确定哪个字段为空,需要使最内层循环中的输出具有条件。此外,用金丝雀字符串填充空字段的例程并不说明第一个或最后一个字段是空的

。。。
rem在行首和行尾添加分隔符,以允许检测空字符
rem第一个/最后一个字段。
设置“工时=|%%X |”
rem将金丝雀插入空字段(运行两次以处理连续的空字段
rem字段)。
设置“工作=!工作:| | |#NUL#|!”
设置“工作=!工作:| | |#NUL#|!”
rem从行的开头/结尾删除其他分隔符。
设置“工时=!工时:~1,-1!”
对于/F“tokens=1,2,3,4,5,6*delims=|”%%i in(“!work!”)do(
如果“%%i”=“#NUL#”回显字段0为空
如果“%%j”=“#NUL#”回显字段1为空
如果“%%k”=“#NUL#”回显字段2为空
如果“%%l”=“#NUL#”回波字段3为空
如果“%%m”=“#NUL#”回波字段4为空
如果“%%n”=“#NUL#”回显字段5为空
)
...
在PowerShell中执行此操作会更容易:

Import Csv'C:\path\to\input.Csv'-分隔符'|'| ForEach对象{
$\ pObject.Properties|
其中对象{-not$\值}|
选择对象-展开名称
}

您看到了什么?你希望看到什么?应用中给出的提示,如果匹配以
|
开头或结尾或包含
|
的行,是否可以用最少的代码重现问题;或者…如果“%%n”==”。我的输出如下:第一个是2017年6月27日第二个是#num第三个是28998449388.11第四个是5244686087.57第五个是31755076225.46第六个是我需要对这个输出进行条件检查,就像“第二个是#num”一样。我需要移动打印“字段1为空”稍后,我将通过电子邮件发送电子邮件id上的文本,以便通知。如果有两个以上的字段有#NUL#,则需要在电子邮件中为这两个字段重复通知。@KAPIL如果需要提供其他信息,请回答您的问题。不要将其隐藏在注释中。批处理解决方案将不起作用,因为
for
将连续分隔符视为一个分隔符。@Stephan感谢您的提醒。修正,完成。我还需要一点帮助。由于我的输出可以有多个字段名为空,我将“name”的值移动到一个txt文件中,如下所示:选择对象-扩展名称| out file D:\tmp\test\out.txt现在我需要通过电子邮件发送out.txt中的文本,并尝试使用blat out.txt-发送email@email.com-主题“字段缺失”-主体“字段缺失”我收到电子邮件,但是,文件中的文本不是通过电子邮件发送的。请注意,我不想在电子邮件中作为附件。请建议。
setlocal enabledelayedexpansion
@echo off
for /f "tokens=*" %%X in (TEMP.csv) do (
  set "work=%%X"
  :: fill empty fields with "#NUL#" ...
  :: but do it twice, just in case consecutive fields are empty
  for /l %%j in (1,1,2) do set "work=!work:||=|#NUL#|!"
  for /F "tokens=1,2,3,4,5,6* delims=|" %%i in ("!work!") do (
    echo first is %%i
    echo second is %%j
    echo third is %%k
    echo fourth is %%l
    echo fifth is %%m
    echo sixth is %%n
    echo -------------  
  )
)