晚上好,
我想批量执行以下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;
@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
。