如何写主机来控制已移动的所有文件名

时间:2018-06-07 13:59:12

标签: powershell

我试图在控制台中记录下面作业中移动的所有文件名。如果我在写主机之后放置$file$files,它会记录完整路径并指示移动*.pdf。我试图将每个被移动的文件名记录到控制台。下面是我的脚本。任何帮助将非常感激。

# Move the printed pdfs to an archive location
$files = "\\fileLocation\Express\*.pdf"

foreach ($file in $files) 
{
try 
    {
 # Move all the files
 move-item $files -Destination '\\networkShare\Archive\express' -Force 

 # Output the logging in the console
 Write-Host ("The file " + $file.$_.Name + " has been moved")
     }
 catch
     {
 Write-Host ($file.$_.Name + $_.Exception.message)
     }
 }

2 个答案:

答案 0 :(得分:3)

$files是一个字符串。你的for不知道这是一条路或什么特别的。您似乎将其视为文件对象

如果您想列出所有需要先列举这些路径的文件,那么您的循环可以单独处理每个文件。

注意:在您的循环中,您有Move-Item $ files ,这会使水变得混乱。您想使用$file,但仍然没有按预期方式工作。

foreach ($file in (Get-ChildItem "c:\temp" -Filter "*.pdf")){
    try {
        # Move all the files
        move-item $file -Destination '\\networkShare\Archive\express' -Force 

        # Output the logging in the console
        Write-Host ("The file " + $file.Name + " has been moved")
    } catch {
        Write-Host ($file.Name + $_.Exception.message)
    }
}

这将在循环传递期间处理每个文件。

老实说,如果你想要更详细的输出,像robocopy那样可以提供更多信息。

robocopy "\\fileLocation\Express\" '\\networkShare\Archive\express' '*.pdf' /MOV

您可以通过robocopy /?Doc.Microsoft

查看详情

答案 1 :(得分:0)

试试这个 -

# Move the printed pdfs to an archive location
$files = Get-ChildItem -path "\\fileLocation\Express\*.pdf"

foreach ($file in $files) 
{
try 
    {
 # Move all the files
 move-item $files -Destination '\\networkShare\Archive\express' -Force 

 # Output the logging in the console
 Write-Host ("The file " + $file.Name + " has been moved")
     }
 catch
     {
 Write-Host ($file.Name + $_.Exception.message)
     }
 }