在重命名和使用文件夹移动文件时进行循环

时间:2019-01-28 08:40:05

标签: powershell

早上好

上周开始使用powershell来处理一些小脚本,现在我被困在为重命名和移动文件创建for循环的过程中。 我有这两个命令

get-childitem "$Quellordner" | Rename-Item -NewName {$_.Name.Replace("[Index]","-")}
get-childitem "$Quellordner" | Move-Item -Force -Destination $Zielordner -Verbose *>&1 | Set-Content $Logfileordner$Logfilename

并且它们工作正常,但是不使用for循环有点奇怪。不幸的是,我无法使它起作用:/

任何帮助将不胜感激!

(PS:除了复制实际内容并将其粘贴到新行下方之外,还有其他方法可以创建降序日志文件(最新到最旧)吗?)

2 个答案:

答案 0 :(得分:2)

您可以通过简单地扩展管道来结合重命名和移动:

Get-ChildItem -Path *.txt |
    Rename-Item -NewName {$_.Name -replace "[Index]","-"} -PassThru |
        Move-Item -Destination $Zielordner -Force

不直接支持写入文件的开头,这可能是因为它是一项昂贵的操作(您需要以某种方式移动所有内容以腾出空间),而且似乎更容易损坏/丢失数据。要看的一件事是按正常方式写入日志,但以相反的顺序显示。例如,Get-Content可以将文本文件的各行读入一个数组,可以很容易地从末尾开始输出。

答案 1 :(得分:0)

您实际上已经在使用foreach循环。 ForEach-Object准确地说。

您的代码行:

get-childitem "$Quellordner" | Rename-Item -NewName {$_.Name.Replace("[Index]","-")}

与以下代码完全相同:

$files = get-childitem "$Quellordner"
foreach($_ in $files){
    Rename-Item -NewName {$_.Name.Replace("[Index]","-")}
}

关于您的PS:据我所知,没有办法在不读取文件的情况下在文本文件的顶部添加新行,而是在顶部添加要添加的行并将其写回。

>