批处理文件中的Powershell命令

问题描述 投票:0回答:1

晚上好,

我想批量执行以下powershell命令:

$data = Import-Csv C:\Users\powershell\input.txt -delimiter ";" -Header (1..41);1..25 | %{$data[0].($_+16) = $data[$_].16};($data[0] | convertto-csv -delimiter ";" -NoType | select -skip 1) -replace '"' | out-file  C:\Users\powershell\output.txt

为此,我使用以下批处理:

@echo off

powershell -Executionpolicy ByPass -Command "$data = Import-Csv C:\Users\powershell\input.txt -delimiter ';' -Header (1..41);1..25 | %{$data[0].($_+16) = $data[$_].16};($data[0] | convertto-csv -delimiter ';' -NoType | select -skip 1) -replace '"' | out-file  C:\Users\powershell\output.txt"

不幸的是,它无法正常工作,执行了命令,打开了文件但未保存,仅保存文件而不打开文件。

有人可以告诉我为什么吗?它如何正常工作?

示例输入:

Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;
Klaus;Müller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;

示例输出:

Klaus;Möller;Straße;PLZ;Ort;1;2;3;4;5;6;;;;;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;DE1;
batch-file batch-processing
1个回答
0
投票
@echo off

powershell -Executionpolicy ByPass -Command^
 $data = Import-Csv C:\Users\powershell\input.txt -encoding OEM -delimiter ';' -Header (1..41);1..25 ^|^
 %%{$data[0].($_+16) = $data[$_].16};($data[0] ^|^
 convertto-csv -delimiter ';' -NoType ^|^
 select -skip 1^) -replace '\^"' ^|^
 out-file C:\Users\powershell\output.txt -encoding OEM

传递给powershell.exe的双引号中的双引号可能需要使用\进行转义,否则内部双引号可能会在解析期间被剥离。批处理文件可能需要使用^转义双引号。由于问题,决定删除外部双引号并根据需要进行转义。

  • ^ esacape在行尾是批处理文件中的行继续。
  • [^]在字符使批处理文件中的字符字面量之前转义。对于字符)|
  • %转义,然后%使字符文字成为批处理文件。不包括可以使用for%%变量。
  • OEM编码用于输入和输出以匹配问题中发布的example-input
© www.soinside.com 2019 - 2024. All rights reserved.