[英]Capture File Paths with Out-File in Powershell
我创建了一个脚本,用于清理工作中的某些驱动器。 我被要求创建一个日志,并在移动文件后将其保留在源文件夹中。
当前,此过程很慢,因为我的脚本创建了一个文本文件,该文件的文件符合我输入的参数。 验证或编辑文本文件后,我将允许脚本读取文件并继续执行所需的操作。 我正在使用Out-File
创建此原始文本文件。 显然,文件的路径会更改,因为我正在将它们从一个驱动器移动到另一个驱动器。 我想记录他们的新路径,但似乎无法弄清楚该如何做。
脚本创建和读取的文件如下所示:
C:\This\Is\The\Source\Something.rpt
C:\This\Is\The\Source\Somethingelse.bak
C:\This\Is\The\Source\AnotherFile.jpg
我正在寻找一种可以在文件移动后反映新路径的东西。 以我尝试过的不同方式,我要么什么都没有结束,要么只是最后一个文件被复制,这将告诉我Out-File
不是追加而是每次获取新文件路径时都会覆盖。
并且列表将继续。 以下是我遇到的脚本问题:
$path = Read-Host "What path should I look at?"
$SourceFolder = $path
$files = Get-ChildItem $path -Recurse
| Where-Object {$_.lastwritetime.Date -eq $targetdate}
|Where-Object {$_.PSIsContainer -eq $false}
| ForEach-Object {$_.fullname}
| Out-File $OutFileCopy
$Target = Read-Host "What is the destination?"
Write-Host "Please view the text file created." -foregroundcolor "yellow" -backgroundcolor "red"
Invoke-Item $OutFileCopy
$CopyContinueAnswer = Read-Host "Would you like to continue? Y or N?"
If ($CopyContinueAnswer -eq 'Y') {
$Readfile = Get-Content $outfilecopy
$ReadFile | Where-Object {$_.PSIsContainer -eq $false}
foreach ($file in $ReadFile) {
$logfile = "$Sourcefolder\log.txt"
out-file $logfile
Write-Host "The old path is $File"
$TargetPath = $File.Replace($SourceFolder, $Target)
if (!(Test-Path $TargetPath)){
Write-Host "This is the new path $TargetPath" -foregroundcolor "Magenta"
Write-Host
Copy-Item -path $file -Destination $TargetPath
Write-output $TargetPath | out-file $logfile
}
默认情况下, Out-File
将覆盖现有文件。 如果您不希望发生这种情况,请使用Out-File -append
。 我建议查看Microsoft文档中的Out-File
; 您可以通过在任何PowerShell提示符下键入Get-Help Out-File
或单击链接来找到它。
我要记录新文件路径的文件正在foreach循环中创建。 每次进入下一个文件时,它都会重新创建log.txt文件并清除以前的文件。 现在,我已将其从循环中取出,现在不再有什么要记录的问题,或者只记录了循环中最后一个文件的问题。
我将创建脚本的一部分,以在尝试创建log.txt之前先查看它是否已经存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.