Как записать-хост в консоль все имена файлов, которые были перемещены
Я пытаюсь записать на консоль все имена файлов, которые были перемещены в задании ниже. Если я положу $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 ответа
$files
это одна строка Ваш for
не знает, что это путь или что-то особенное. Вы, кажется, относитесь к нему как к объекту File
Если вы хотите перечислить все файлы, вам нужно сначала перечислить эти пути, чтобы ваш цикл мог обрабатывать каждый из них в отдельности.
Примечание: что в вашем цикле у вас было Move-Item
$ файлы, которые мутят воду. Вы хотели использовать $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 /?
или на Док.Микрософт
Попробуй это -
# 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)
}
}