从外部listing.csv文件中排序后,将结果插入到txt文件>> listing2.txt中

时间:2017-03-18 11:44:55

标签: powershell csv batch-file

@echo off
setlocal EnableDelayedExpansion
for /f "delims=; tokens=1-5" %%i in ('type listing.csv') do (
  echo %%k | find "CNSHA" > nul
  if !errorlevel!==0 echo Searched_Value  "CNSHA" was found in %%i: %%j:%%k
)
pause

使用文件listing.csv我想将搜索结果保存到另一个文件listing2.txt。 在代码公式>> listing2.txt中包含哪些代码行来保存排序结果或类似内容?

screenshot

3 个答案:

答案 0 :(得分:2)

您可以在这样的循环中追加文件:

for ... %%i in (...) do (
  echo something >> output.txt
  echo or other
)

上面只会在输出文件中放入“某些”行,而“或其他”行会打印到控制台。

您还可以通过将重定向运算符放在循环外部来将整个循环输出写入文件:

for ... %%i in (...) do (
  echo something
  echo or other
) >> output.txt

这会将“某些东西”和“或其他”行放入输出文件中。

请注意,在使用追加重定向运算符(>>)时,如果您不想保留循环之前存在的内容,则需要截断或删除现有文件:

type nul> output.txt

您可以通过使用写重定向运算符(>)来避免这一额外步骤,但为此您需要将整个循环放在括号中:

(for ... %%i in (...) do (
  echo something
  echo or other
)) > output.txt
顺便说一下,您也可以将重定向运算符放在一行的开头,这样做是很好的,因为它可以避免不自觉地在输出行中添加尾随空格:

for ... %%i in (...) do (
  >>output.txt echo something
  echo or other
)

>>output.txt for ... %%i in (...) do (
  echo something
  echo or other
)

当然你也可以混合使用两种方法(在循环内部和外部重定向),这样你就可以在一个文件中得到一些输出,而在另一个文件中得到其余的输出:

>>output1.txt for ... %%i in (...) do (
  >>output2.txt echo something
  echo or other
)

如果您希望CSV中的过滤记录作为输出,则需要重建输出行:

>>output.csv echo %%~i;%%~j;%%~k

在您的特定情况下,使用find而不是使用循环可能更容易:

>output.csv (type input.csv | find ";CNSHA")

既然你也标记了你的问题我也会提出一个PowerShell解决方案,只是为了好的措施:

$headers = 'foo', 'bar', 'baz'
Import-Csv 'input.csv' -Delimiter ';' -Header $headers | Where-Object {
  $_.baz -eq 'CNSHA'
} | Export-Csv 'output.csv' -NoType

上面将第3个字段的值为“CNSHA”的所有记录写入新文件。如果您的输入CSV附带标题,请移除-Header $headers。如果您不想在输出中使用标题,请将Export-Csv语句更改为类似的内容:

... | ConvertTo-Csv -NoType | Select-Object -Skip 1 | Set-Content 'output.csv'

答案 1 :(得分:0)

假定可能的先前文件listing2.txt应该被覆盖:

@echo off
setlocal
(for /f "delims=; tokens=1-5" %%i in (
  'find /i "CNSHA" listing.csv'
 ) do echo Searched_Value  "CNSHA" was found in %%i: %%j:%%k
) >listing2.txt
pause

其他请将>重定向加倍>>

答案 2 :(得分:0)

你有没有理由不能使用:

Find "CNSHA"<"listing.csv">"listing2.txt"