我需要我的脚本接受来自文件的输入而不是读取主机
I need my script to accept input from a file rather than read-host
我有一个 ps 脚本,它会询问一个数字,然后在包含 1000 多个文件的位置搜索该数字,复制具有这些数字的文件名,然后将其输出到一个文件中。该号码也保存在不同位置的 txt 文件中,我从中手动复制并插入到此脚本中。是否可以让脚本从包含数字的文件的第二行开始读取,然后在文件中搜索该数字,就像现在一样?
这是我正在使用的代码:-
$Path = "D:\Projects\MSMQ Journal Messages\PurchaseManagementPO"
$Text = Read-Host -Prompt "PO Number"
$PathArray = @()
$Results = "D:\Chayan\POmiss\miss.txt"
# This code snippet gets all the files in $Path that end in ".xml".
Get-ChildItem $Path -Filter "*.xml" |
Where-Object { $_.Attributes -ne "Directory"} |
ForEach-Object {
If (Get-Content $_.FullName | Select-String -Pattern $Text)
{
$PathArray += $_.FullName
$PathArray += $_.FullName
}
}
Write-Host "Contents of ArrayPath:"
$PathArray | % {$_} | Out-File "D:\Chayan\POmiss\miss.txt" -Append
该 PO 编号来自一个文件,该文件是通过不同的脚本生成的,并按如下方式保存:-
ponumMaster
908859
280973
我手动将这些数字放在读取主机中以进行搜索并保存文件名。 powershell 是否可以从该文件中复制这些数字并执行任务?
您应该可以使用 -skip
移过第一行
下面的示例将跳过第一行并在之后给出结果
get-content C:\_lab\test.txt | select -skip 1
这个例子会跳过第一行,只给出第二行的结果
get-content C:\_lab\test.txt | select -first 1 -skip 1
对于您的脚本,您只需要执行以下操作:
$Text = get-content C:\_lab\test.txt | select -skip 1
#we clear this variable so it can be run multiple times in the same session
clear-variable final -ErrorAction Ignore
#grab txt file content and split into an array
[array]$txt=(get-content "D:\Chayan\POmiss\miss.txt") -split " "
#take out the blanks and assign to new variable called final (we clear this above so it can be run multiple times in the same session)
foreach($line in $txt){
if($line.replace(" ","")){
[array]$final+=$line
}
}
#run script, calling the variable $text in place of the numbers
foreach($text in $final){
(your normal script here)
}
我有一个 ps 脚本,它会询问一个数字,然后在包含 1000 多个文件的位置搜索该数字,复制具有这些数字的文件名,然后将其输出到一个文件中。该号码也保存在不同位置的 txt 文件中,我从中手动复制并插入到此脚本中。是否可以让脚本从包含数字的文件的第二行开始读取,然后在文件中搜索该数字,就像现在一样? 这是我正在使用的代码:-
$Path = "D:\Projects\MSMQ Journal Messages\PurchaseManagementPO"
$Text = Read-Host -Prompt "PO Number"
$PathArray = @()
$Results = "D:\Chayan\POmiss\miss.txt"
# This code snippet gets all the files in $Path that end in ".xml".
Get-ChildItem $Path -Filter "*.xml" |
Where-Object { $_.Attributes -ne "Directory"} |
ForEach-Object {
If (Get-Content $_.FullName | Select-String -Pattern $Text)
{
$PathArray += $_.FullName
$PathArray += $_.FullName
}
}
Write-Host "Contents of ArrayPath:"
$PathArray | % {$_} | Out-File "D:\Chayan\POmiss\miss.txt" -Append
该 PO 编号来自一个文件,该文件是通过不同的脚本生成的,并按如下方式保存:- ponumMaster
908859
280973
我手动将这些数字放在读取主机中以进行搜索并保存文件名。 powershell 是否可以从该文件中复制这些数字并执行任务?
您应该可以使用 -skip
移过第一行
下面的示例将跳过第一行并在之后给出结果
get-content C:\_lab\test.txt | select -skip 1
这个例子会跳过第一行,只给出第二行的结果
get-content C:\_lab\test.txt | select -first 1 -skip 1
对于您的脚本,您只需要执行以下操作:
$Text = get-content C:\_lab\test.txt | select -skip 1
#we clear this variable so it can be run multiple times in the same session
clear-variable final -ErrorAction Ignore
#grab txt file content and split into an array
[array]$txt=(get-content "D:\Chayan\POmiss\miss.txt") -split " "
#take out the blanks and assign to new variable called final (we clear this above so it can be run multiple times in the same session)
foreach($line in $txt){
if($line.replace(" ","")){
[array]$final+=$line
}
}
#run script, calling the variable $text in place of the numbers
foreach($text in $final){
(your normal script here)
}