简体   繁体   English

如何在字符串中输入 get-childitem

[英]How to enter get-childitem in to a string

I am tring to create a script that will output the name of.txt files via for loop that counts the number of files and creates an option to open.txt file from just one click.我正在尝试创建一个脚本,该脚本将 output 通过 for 循环计算 .txt 文件的名称,该循环计算文件的数量并通过单击创建一个打开 .txt 文件的选项。

$s = (Get-ChildItem -Path C:\*.txt -Name | Measure-Object -Line).Lines

for($i=0; $1 -gt 5 ;$i++)
{
    $c = [string[]](Get-ChildItem -Path C:\*.txt -Name)
    [void] $objListBox.Items.Add('$i')
    Write-Output $c
}

I am stuck with Get-childitem like in $c to get the list of file names into a variable so i can split or get the line for user option.我坚持使用 $c 中的 Get-childitem 将文件名列表放入变量中,这样我就可以拆分或获取用户选项的行。

Thanks in advance提前致谢

You can use the .ToString method to convert any given object to a string.您可以使用.ToString方法将任何给定的 object 转换为字符串。 If you want $c to be a string, the code you are looking for would look something like this:如果您希望 $c 成为字符串,则您要查找的代码如下所示:

$c = (Get-ChildItem -Path C:\*.txt -Name).ToString

i am not sure what exactly you want from the script, but here is my approach to set the items in $objListBox我不确定你到底想从脚本中得到什么,但这是我在 $objListBox 中设置项目的方法

$txtFiles=Get-ChildItem -Path C:\stackoverflow -Recurse -Filter *.txt 

#Option 1 FullPath to Items
$txtFiles.fullname | ForEach-Object { $objListBox.Items.Add($_) }
#Option 2 Just the Name to Items
$txtFiles.name | ForEach-Object { $objListBox.Items.Add($_) }
#Option 3 Just the Name without Extentension to Items
$txtFiles.basename | ForEach-Object { $objListBox.Items.Add($_) }

#Count for All Files
$txtFiles.Count

what about a form that is created with a dynamic size and additionally a scrollbar if there is no space left.如果没有剩余空间,那么使用动态大小和滚动条创建的表单呢? buttons that start the txt file and close the form.启动 txt 文件和关闭表单的按钮。 表单截图示例

$basePath = "C:\"
$SearchString = Join-Path $basePath "*.txt"
$filenames = @(Get-ChildItem -Path $SearchString -Name | Sort)
$count = $filenames.count

#All you need for System.Windows.Forms to work
Add-Type -AssemblyName System.Windows.Forms

# Variables for generating size
$ButtonHeight = 35
$ButtonWidth = 450
$WindowTitle = "Choose a file"
$BottomSpace = $StartHeight = 10
$LeftSpace = $RightSpace = 30
$CurrentHeight = $Startheight
$FormHeight = 40 + $BottomSpace + $StartHeight + $ButtonHeight * $count
$FormWidth = 20 + $LeftSpace + $RightSpace + $ButtonWidth

# Create the form
$form = New-Object System.Windows.Forms.Form
$form.Text = $WindowTitle
$form.Size = New-Object System.Drawing.Size($FormWidth,$FormHeight)
$form.FormBorderStyle = "Fixed3d" # Sizeable: User may change size - Fixed3d: User may not change size
$form.StartPosition = "CenterScreen"
$Form.AutoScroll = $True # Scrollbars when you need it
$form.Topmost = $true #always on top
$form.MaximizeBox = $false #Allows to maximize window

# Generate the buttons in a foreach and arrange them
foreach ($filename in $filenames) {
    $GeneratedButton = New-Object System.Windows.Forms.Button
    $GeneratedButton.Location = New-Object System.Drawing.Size($LeftSpace,$CurrentHeight)
    $GeneratedButton.Size = New-Object System.Drawing.Size($ButtonWidth,$ButtonHeight)
    $GeneratedButton.Text = $filename
    # Action to take when button is clicked -- Open file and close form
    $GeneratedButton.Add_Click({ Start-Process (Join-Path $BasePath $filename) ; $form.Close() })
    $form.Controls.Add($GeneratedButton)
    $CurrentHeight += $ButtonHeight
}

# Activate the Form when loaded
$form.Add_Load({
    $form.Activate()
})
# Show the form when loaded, but hide any results
$form.ShowDialog() > $null  # Trash any output

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM