powershell - 在 power shell 中,如何将我在文件夹中执行的操作复制到其他文件夹?
问题描述
我应该做的动作:
- 从文件夹中读取文件
- 从第一行提取日期
- 将其更改为“yyyymmdd”格式
- 通过删除前 4 个字符重命名所有文件并将此格式日期放在开头。
示例 FILE.FILE 将更改为 20180725.FILE(日期将在文件中)
我可以通过以下代码在Newpath中的单个文件夹中完成此操作:
$path="\\Data\DEV\DevDat\Arun\DXSL\Newpath\20170601"
$files=Get-ChildItem $path | Select-Object -first 1
$data = Get-Content "$path\$files" -first 1
foreach($line in $data)
{
$arr = $line.substring(52,4)+$line.substring(46,2)+$line.substring(49,2)
}
get-childitem $path | rename-item -newname { $arr +[string]($_.name).substring(4)}
但是,我无法将此操作循环复制到其他文件夹。Newpath文件夹有几个子文件夹。我需要重命名Newpath中每个子文件夹中的文件。有什么办法可以做到这一点?
仅供参考,我正在使用版本 4 的 powershell。
解决方案
我的评论中建议的 PowerShell 脚本。
- 它不检查要重命名的文件是否已经存在。
- Rename-Item
-WhatIf
附加了参数,因此它仅显示将要执行的操作。 - 如果第一行中有更多数字,则脚本将匹配第一个模式。
- 该脚本也不检查文件是否已重命名为模式。
## Q:\Test\2018\07\25\SO_51522205.ps1
#Requires -Version 3.0
$BasePath = "\\Data\DEV\DevDat\Arun\DXSL\Newpath"
$RE = [RegEx]'(?<Month>\d{2}).(?<Day>\d{2}).(?<Year>\d{4})'
ForEach ($Folder in (Get-ChildItem -Path "$BasePath\*" -Directory)){
ForEach ($File in (Get-ChildItem -Path "$($Folder.FullName)\*" -File)){
$Line1 = (Get-Content $File.FullName | Select-Object -First 1)
If ($File.BaseName.Length -gt 4){
$BaseName = $File.BaseName.SubString(4)
} else {
$BaseName = ''
}
If ($Line1 -match $RE){
$NewName = ("{0}{1}{2}{3}{4}" -f `
$Matches.Year,
$Matches.Month,
$Matches.Day,
$BaseName,
$File.Extension)
$File | Rename-Item -NewName $NewName -WhatIf
} Else {
"{0} doesn't have a proper date in 1st line" -f $File.FullName
}
}
}
之前的样本树,
> tree /F
└───Newpath
└───20170601
blahblah.txt
FILE.FILE
运行脚本后。
> tree /F
└───Newpath
└───20170601
20180724blah.txt
20180725.FILE
推荐阅读
- sql - 旋转数据库表
- apache-spark - 用于 Spark 结构化流的 Qubole Kinesis 连接器引发错误
- linux - 是否可以控制进程的调度策略
- java - 为什么我不能通过按“输入”来打破我的 while 循环
- python - scipy ver 0.18 scipy.interpolate.UnivariateSpline 如何处理不严格增加的值?
- quarkus - 使用 Quarkus 使用 SOAP 服务
- python - 如果我的测试用例需要来自数据库而不是空数据库的数据怎么办?
- varnish - 我的清漆配置似乎无法正常工作
- ios - IOS Tabbar滚动动画:触摸指示器视图时文本改变颜色
- python - 正则表达式:获取特定字符串后的数字、空格或“-”字符