Как записать-хост для консоли все имена файлов, которые были перемещены - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь записать на консоль все имена файлов, которые были перемещены в следующем задании.Если я ставлю $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 голосов
/ 07 июня 2018

$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 /? или Док. Microsoft

0 голосов
/ 07 июня 2018

Попробуйте это -

# 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)
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...