【发布时间】:2019-01-02 11:14:13
【问题描述】:
我应该做的事情:
- 从文件夹中读取文件
- 从第一行提取日期
- 改成'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 内每个子文件夹中的文件。有什么方法可以实现吗?
仅供参考,我使用的是 powershell 版本 4。
【问题讨论】:
-
以什么格式提取日期,在第一行的位置? edit 你的问题包含更多细节。一般来说,首先迭代文件夹,然后是文件,然后读取内容并使用正则表达式获取日期,可能是
(?<Month>\d{2}).(?<Day>\d{2}).(?<Year>\d{4}) -
@LotPings。问题不在于提取日期。它是在循环中自动将结果复制到其他文件夹。由于我在 $path 变量中明确提到,我能够为文件夹 20170601 实现我想要的结果。但是,还有其他文件夹 20170602、20170603 等等……我需要一个循环来进行上述修改
标签: powershell loops rename file-rename subdirectory