Powershell脚本-需要写入和附加文本文件
我绝不是powershell专家,所以我的问题对于大多数人来说可能非常简单…Powershell脚本-需要写入和附加文本文件,powershell,Powershell,我绝不是powershell专家,所以我的问题对于大多数人来说可能非常简单… 目前,我每天都运行powershell脚本,将所有新的.RTF文件从一个目录移动到另一个目录,以获取我们所有客户的信息。 但是,并非总是有文件要移动,当发生这种情况时,我希望让脚本为第一个客户端创建一个文本文件。这种情况发生后,再为每个客户端追加该文件。 我试过几种方法,但都没能奏效 我当前为单个客户端编写的脚本是 $path = "\\XXXXX\XXXXXX\XXXXX\XXXXXX\XXXXXX\XXXXXX\*
目前,我每天都运行powershell脚本,将所有新的.RTF文件从一个目录移动到另一个目录,以获取我们所有客户的信息。
但是,并非总是有文件要移动,当发生这种情况时,我希望让脚本为第一个客户端创建一个文本文件。这种情况发生后,再为每个客户端追加该文件。
我试过几种方法,但都没能奏效 我当前为单个客户端编写的脚本是
$path = "\\XXXXX\XXXXXX\XXXXX\XXXXXX\XXXXXX\XXXXXX\*.rtf"
$Destination = "\\XXXXX\XXXXXX\XXXXX\XXXXXX\XXXXXX\XXXXXX"
Foreach($file in (Get-ChildItem $path))
{
If($file.LastWriteTime -gt (Get-Date).adddays(-1).date)
{ Copy-Item -Path $file.fullname -Destination $Destination } }
然后我运行一个主脚本,启动这个脚本和其他连续的脚本 不要在
ForEach(…)
循环中的if
语句中测试每个单独的文件,而是首先过滤掉这些文件:
$Path = \\...\*.rtf
$Destination = \\...\...
$LastWrite = (Get-Date).AddDays(-1).Date
$FilesToCopy = (Get-ChildItem $path | Where-Object {$_.LastWriteTime -gt $LastWrite})
现在,$FilesToCopy
中有一个应该处理的文件数组;如果该数组为空(长度为零),则在没有要复制的文件时,可以执行任何需要执行的操作,否则可以复制文件:
if ($FilesToCopy.Length -eq 0) {
# Create the text file
} else {
ForEach ($File in $FilesToCopy) {
Copy-Item -Path $File -Destination $Destination
}
}
注意注释中的@LotPings是正确的;我上面代码中的
ForEach(…)
循环实际上可以被$FilesToCopy | Copy Item-Destination$Destination
替换,但我强烈建议您在进行更改之前熟悉PowerShell管道的工作方式-它实际上与批处理(cmd.exe
)的工作方式不同或者Unix/Linux(sh/csh/bash/etc.
)管道也可以。将您的命令计算出来,将其放入变量中,比如$x,然后将其输送到输出文件
像这样的,
$x | Out-File -Append temp2.txt
完整的代码应该加出来
$path = 'your Path'
$Destination = "Your destination"
$x ="No files to copy for client1"
$LastWrite = (Get-Date).AddDays(-1).Date
$FilesToCopy = (Get-ChildItem $path )| Where-Object {$_.LastWriteTime -gt $LastWrite}
if ($FilesToCopy.Length -eq 0) {
$x | Out-File -Append d:\creditdetails.txt
}
else { ForEach ($File in $FilesToCopy.FullName) {
Copy-Item -LiteralPath $File -Destination $Destination
}
}
复制项接受来自管道的输入,因此Foreach是多余的:
$FilesToCopy |复制项-Destination$Destination
如果各种“客户机”之间的唯一变量是$Path
和$Destination
的值,那么将此脚本转换为高级函数可能值得一看(请参阅)在ForEach
循环中调用高级函数。@LotPings-你确实是对的,我已经更新了答案来反映这一点,这要归功于你。不过,由于我在编辑中给出的原因,我不会更改基本代码。我是否需要为变量$File指定一个值,或者该值是否已自动设置?顺便问一下,请提供帮助!这就是我所拥有的,它没有移动文件或创建.txt文件-我肯定我搞错了…$path=“\\\\\\\…\…\…\…\…\…\…\…\…\audit pending\*.rtf”$Destination=“\\\\…\UploadedFiles\…\…\CreditDetails”$x=“没有为客户端复制的文件”$LastWrite=(获取日期)。AddDays(-1)。Date$FilesToCopy=(Get ChildItem$path | Where Object{$\ uu.LastWriteTime-gt$LastWrite}if($FilesToCopy.Length-eq 0){{{创建文本文件x$\ Out file-Append\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\你能简单地解释一下你想要实现什么吗?我有一组文件,每天从一个目录移动到另一个目录,供316个不同的客户端使用-在我当前的脚本中,移动工作正常,但如果没有文件要移动,我不会得到通知,这一点变得非常重要。为了让它移动文件或不移动,我如果我在一个txt文件中发现没有可移动的文件,我尝试使用此脚本使其发生。。。。