【发布时间】:2016-06-25 10:05:56
【问题描述】:
我想从一行中读取一个字符串,然后将其放入一个变量中,该变量之后用作文件名。 该字符串位于第二行末尾的 .csv 文件中。由于不必要的标题,需要删除第一行。 还有';'旧的 .csv 文件中使用的需要替换为真正的逗号 ','。 到目前为止,我已经获得了以下 PowerShell 脚本:
Powershell -command "(gc file1.csv | select -skip 1) -replace ';', ',' | Foreach-Object{ $_ + ',' } | Out-File file2.csv"
代码说明:
gc file1.csv | select -skip 1 获取 csv 文件的内容。并从临时数组中删除第一行。
-replace ';', ',' 替换所有 ';'用','。
Foreach-Object{ $_ + ',' } 在所有行的末尾添加逗号(这是必要的)。
Out-File file2.csv 创建一个名为“file2.csv”的输出文件。
输入文件的格式如下:(.csv 的前 2 行)
123.256.862;;0;568.153.135;12;0;;255.253.233
123.633.582;;0;568.588.533;12;0;;255.253.233
脚本生成的输出文件如下:(.csv 的前 2 行)
123.256.862,,0,568.153.135,12,0,,255.253.233,
123.633.582,,0,568.588.533,12,0,,255.253.233,
在 PowerShell 中编程时会出现以下问题:
-
如何将此代码编程为多行以提高可读性?
-
如何从第二行读取最后一个元素并将其放入变量中?
-
$Out-File $variable & '.csv'使用此变量作为名称生成新文件是否正确?我已经用虚拟变量尝试过这种方法,但它似乎没有用。更具体地说:新文件名需要为 255.253.233.csv。
我已经在 Google 上搜索了很多关于如何在 PowerShell 中初始化任何变量的信息,但仍然不清楚之后如何准确地声明它。我希望我在寻求解决方案的正确道路上。非常感谢任何帮助。
【问题讨论】:
-
您真的在使用 PowerShell 1.0 吗?我们现在是 v5.0,1.0 甚至没有在任何当前支持的 Windows 版本上发布。运行
$psversiontable.PSVersion以获取您正在运行的真实版本。 -
2.0 版,是正确的。我只检查了 C:\Windows\System32\WindowsPowerShell 的安装文件夹,并且只有一个名为 1.0 的文件夹。奇怪的微软没有更新文件夹名..
-
真的吗?你还停留在2.0?你在运行什么操作系统?它必须是旧的 Windows 7 安装。我建议升级到至少 PowerShell v3。忽略你在可执行文件路径中看到的内容,通过
$PSVersionTable。 -
我执行了你告诉的命令,它声明 v2.0。我还需要在其他一些 PC 上运行该脚本,我不能保证它们运行的是比 v2.0 更新的版本。为 3.0 生成的脚本是否也向后兼容 2.0
-
不,并非所有 v3 脚本都适用于 v2,因为随着时间的推移会添加新的 cmdlet。您确实应该将您的环境升级到每个系统支持的最新版本 - 使其成为您的软件修补策略/流程的一部分。
标签: csv powershell powershell-2.0