Powershell 循环遍历格式-Table
Powershell Loop through Format-Table
我有一个问题。
我创建了一个带有文件名、源目录和目标目录的格式-table。
现在,我尝试使用 foreach 遍历 table。
在这个循环中,我想将文件从源目录移动到目标目录。我的问题是从行中获取项目。
这是我的示例代码:
cls
$MovePathSource = "C:\Users\user\Desktop\sourcefolder"
$MovePathDestination = "C:\Users\user\Desktop\destinationfolder"
$filetypes = @("*.llla" , "html")
$table = dir $MovePathSource -Recurse -Include $filetypes | Format-Table@{Expression={$_.Name};Label="Filename"},@{Expression={($_.DirectoryName)};Label="Sourcepath"},@{Expression={($_.DirectoryName).Replace($MovePathSource,$MovePathDestination)};Label="Destinationpath"}
$table
foreach ($row in $table)
{
write-host "$row.Sourcepath"
#Move-Item -Path ($row.Sourcepath + "\" + $row.Filename) -Destination $row.Destinationpath
}
切勿在处理完数据之前使用 Format-*
-cmdlet。即便如此,也只能在向用户显示某些内容(或创建邮件等)时使用它,因为它们会破坏原始数据,只会给您留下特殊的格式对象。
将 Format-Table
替换为 Select-Object
以获得相同的结果,同时保留可用的对象。
$table = dir $MovePathSource -Recurse -Include $filetypes |
Select-Object @{Expression={$_.Name};Label="Filename"},@{Expression={($_.DirectoryName)};Label="Sourcepath"},@{Expression={($_.DirectoryName).Replace($MovePathSource,$MovePathDestination)};Label="Destinationpath"}
format-table
cmdlet 将命令的输出格式化为table。如果您想使用这些对象,请改用 select
:
$table = dir $MovePathSource -Recurse -Include $filetypes | select @{Expression={$_.Name};Label="Filename"},@{Expression={($_.DirectoryName)};Label="Sourcepath"},@{Expression={($_.DirectoryName).Replace($MovePathSource,$MovePathDestination)};Label="Destinationpath"}
现在您可以像在评论中尝试的那样访问属性。如果要打印 table,则可以使用 $table | format-table
我有一个问题。 我创建了一个带有文件名、源目录和目标目录的格式-table。 现在,我尝试使用 foreach 遍历 table。 在这个循环中,我想将文件从源目录移动到目标目录。我的问题是从行中获取项目。
这是我的示例代码:
cls
$MovePathSource = "C:\Users\user\Desktop\sourcefolder"
$MovePathDestination = "C:\Users\user\Desktop\destinationfolder"
$filetypes = @("*.llla" , "html")
$table = dir $MovePathSource -Recurse -Include $filetypes | Format-Table@{Expression={$_.Name};Label="Filename"},@{Expression={($_.DirectoryName)};Label="Sourcepath"},@{Expression={($_.DirectoryName).Replace($MovePathSource,$MovePathDestination)};Label="Destinationpath"}
$table
foreach ($row in $table)
{
write-host "$row.Sourcepath"
#Move-Item -Path ($row.Sourcepath + "\" + $row.Filename) -Destination $row.Destinationpath
}
切勿在处理完数据之前使用 Format-*
-cmdlet。即便如此,也只能在向用户显示某些内容(或创建邮件等)时使用它,因为它们会破坏原始数据,只会给您留下特殊的格式对象。
将 Format-Table
替换为 Select-Object
以获得相同的结果,同时保留可用的对象。
$table = dir $MovePathSource -Recurse -Include $filetypes |
Select-Object @{Expression={$_.Name};Label="Filename"},@{Expression={($_.DirectoryName)};Label="Sourcepath"},@{Expression={($_.DirectoryName).Replace($MovePathSource,$MovePathDestination)};Label="Destinationpath"}
format-table
cmdlet 将命令的输出格式化为table。如果您想使用这些对象,请改用 select
:
$table = dir $MovePathSource -Recurse -Include $filetypes | select @{Expression={$_.Name};Label="Filename"},@{Expression={($_.DirectoryName)};Label="Sourcepath"},@{Expression={($_.DirectoryName).Replace($MovePathSource,$MovePathDestination)};Label="Destinationpath"}
现在您可以像在评论中尝试的那样访问属性。如果要打印 table,则可以使用 $table | format-table