我必须读取文件夹中的每个文件并确定每个文件的第一行的长度,然后根据该长度是否应该在表中进行操作。我可以批量遍历每个文件并将%% f作为文件,但是如何获得该长度并将其分配给变量?
如果有办法在Powershell中使用批处理文件执行此操作,这会有所帮助,但我还需要知道如何从批处理文件中调用Powershell。
答案 0 :(得分:1)
简单的PowerShell代码如下所示:
param($path)
Get-ChildItem $path -File |
Select FullName,@{Label="1stLineLength";Expression={(Get-Content $_.FullName -First 1).Length}}
因此第一个参数将被视为脚本的路径。然后从批处理中调用它我借用了this SO question的答案。
Powershell.exe -executionpolicy remotesigned -File m:\Scripts\firstlinelength.ps1 "C:\temp"
这将在控制台上得到这样的输出。
FullName 1stLineLength
-------- -------------
C:\Users\mcameron\CleansedBigFile.txt 4
此代码假定您至少拥有PowerShell v3.0 -First
和-File
参数并切换。我想大多数批处理代码都可以轻松转换为PowerShell等效代码,因此如果您的环境允许您考虑转换为功能强大的PowerShell。
答案 1 :(得分:0)
你的一些问题很模糊(什么表?)。但一般来说,根本不需要批处理文件。 PowerShell示例:
Get-ChildItem -File | ForEach-Object {
$firstLineLength = (Get-Content $_ | Select-Object -First 1).Length
if ( $firstLineLength -gt $whateverFromTable ) {
...
}
}
请注意,在PowerShell v3之前,-File
的{{1}}参数不存在。对于PowerShell v2及更低版本,您可以将Get-ChildItem
替换为Get-ChildItem -File
。