Windows 7 Powershell是否在目录树任何部分中放置的新文件上重命名文件?
我从未使用过Powershell(或VBScript),因为我是IT管理员的新手,希望能得到一些重命名文件的指导 每天,我都会使用Filezilla手动从SFTP连接下载文件到名为YYYYMMDD的本地目录filder(尽管稍后,我会希望编写一个自动任务,定期完成此任务)。我想设置的是一种任务,当文件到达distinion目录时,它们会被重命名 对于今天的下载,我想重命名以下文件:Windows 7 Powershell是否在目录树任何部分中放置的新文件上重命名文件?,windows-7,powershell,scheduled-tasks,sftp,Windows 7,Powershell,Scheduled Tasks,Sftp,我从未使用过Powershell(或VBScript),因为我是IT管理员的新手,希望能得到一些重命名文件的指导 每天,我都会使用Filezilla手动从SFTP连接下载文件到名为YYYYMMDD的本地目录filder(尽管稍后,我会希望编写一个自动任务,定期完成此任务)。我想设置的是一种任务,当文件到达distinion目录时,它们会被重命名 对于今天的下载,我想重命名以下文件: Original Name Renamed Filename wcm14444
Original Name Renamed Filename
wcm14444.csv.11.10.20_09.32 wcm14444_111020_0932.csv
wcm14444.csv.11.10.21_00.09 wcm14444_111021_0009.csv
wcm14444.pdf.11.10.20_09.32 wcm14444_111020_0932.pdf
wcm14444.pdf.11.10.21_00.10 wcm14444_111021_0010.pdf
wcm1cash.csv.11.10.21_00.56 wcm1cash_111021_0056.csv
wcm1money.csv.11.10.21_00.56 wcm1money_111021_0056.csv
wcm1opnpos.csv.11.10.21_00.56 wcm1opnpos_111021_0056.csv
wcm1trades.csv.11.10.21_00.56 wcm1trades_111021_0056.csv
wcm1_an.pdf.11.10.21_03.26 wcm1_an_111021_0326.pdf
wcm1_ds.pdf.11.10.21_00.22 wcm1_ds_111021_0022.pdf
wcm1_ep.csv.11.10.21_03.26 wcm1_ep_111021_0326.csv
wcm1_ms.pdf.11.10.21_03.26 wcm1_ms_111021_0326.pdf
您将在我的重命名要求中注意到:
1.文件扩展名出现在文件名的中间,并被放置到最后。
2.我将“.”替换为“”,它们显示为日期分隔符。如果有任何帮助,我只希望收到文件类型为(“.csv”、“.pdf”、“.xls”)的文件,如果这些文件出现在文件名中,它们将被替换为“\ux”
目前我会使用Excel来执行任务,但这似乎很难部署为系统任务?这似乎更像是Powershell的任务
如果我正在创建YYYYMMDD文件夹,例如N:\SFTP\Provider1\YYYYMMDD,那么当文件下载到每天的YYYYMMDD中时,自动重命名文件的最佳方法是什么(注意,在同一天,可能没有创建文件夹,因为没有新文件)。
非常感谢和亲切的问候,
伯蒂
谢谢大家的帮助。更多信息请访问本页,以了解那些跌跌撞撞的用户。我现在已经在N:\SFTP\Provider1\N创建了一个renamesftp.ps1文件,其中包含
$pattern = '^([^\.]+)\.(csv|xls|pdf)\.(\d{2})\.(\d{2})\.(\d{2})_(\d{2})\.(\d{2})'
$todayDate = Get-Date -Format "yyyyMMdd"
Get-ChildItem (".\" + $todayDate + "\") -Recurse | Foreach-Object{
if($_.Name -match $pattern)
{
echo $NewName
$NewName = "{0}_{1}{2}{3}_{4}{5}.{6}" -f $matches[1],$matches[3],$matches[4],$matches[5],$matches[6],$matches[7],$matches[2]
Rename-Item (".\" + $todayDate + "\" + $_) -NewName $NewName
}
}
powershell .\Rename_SFTP.ps1
然后,我创建了一个RunRenameTaskForToday.bat,其中包含
$pattern = '^([^\.]+)\.(csv|xls|pdf)\.(\d{2})\.(\d{2})\.(\d{2})_(\d{2})\.(\d{2})'
$todayDate = Get-Date -Format "yyyyMMdd"
Get-ChildItem (".\" + $todayDate + "\") -Recurse | Foreach-Object{
if($_.Name -match $pattern)
{
echo $NewName
$NewName = "{0}_{1}{2}{3}_{4}{5}.{6}" -f $matches[1],$matches[3],$matches[4],$matches[5],$matches[6],$matches[7],$matches[2]
Rename-Item (".\" + $todayDate + "\" + $_) -NewName $NewName
}
}
powershell .\Rename_SFTP.ps1
至少这样,当我手动下载文件时,我所需要做的就是双击一个更高级别的.bat文件,它就会找到需要重命名文件的正确文件夹。我所需要知道的就是找到一种方法来自动删除SFTP的内容
谢谢大家。这是一项相当复杂的任务,有几个问题(很可能还有几个解决方案)。以下是一些指导原则,可以帮助您继续:
- 使用
遍历所有文件。Get ChildItem | Foreach Item
保存当前项$\uu
- Powershell非常支持,请使用
。我倾向于命名匹配项,以便于识别它们。类似的内容可能适用于您的特定命名格式:if($\u-match“regexp”)
if($s-match“(?*)\(?csv | pdf)(?*)\u(?\ d{2})\(?\d{2})”{ $newname=$matches[“pre”]+“”+ ($matches[“date”]-替换“\。”,“”)+ “”+$matches[“hour”]+$matches[“min”]+ '.+$matches[“ext”] }
- 要获取当前日期,请使用
。使用它每天创建一个新文件夹get Date-Format“yyyyymmdd”
- 使用
遍历所有文件。Get ChildItem | Foreach Item
保存当前项$\uu
- Powershell非常支持,请使用
。我倾向于命名匹配项,以便于识别它们。类似的内容可能适用于您的特定命名格式:if($\u-match“regexp”)
if($s-match“(?*)\(?csv | pdf)(?*)\u(?\ d{2})\(?\d{2})”{ $newname=$matches[“pre”]+“”+ ($matches[“date”]-替换“\。”,“”)+ “”+$matches[“hour”]+$matches[“min”]+ '.+$matches[“ext”] }
- 要获取当前日期,请使用
。使用它每天创建一个新文件夹get Date-Format“yyyyymmdd”
- 这是一项相当复杂的任务,有几个问题(很可能还有几个解决方案)。以下是一些指导原则,可以帮助您继续:
- 很快就会有一种叫做砖块的东西
$pattern = '^([^\.]+)\.(csv|xls|pdf)\.(\d{2})\.(\d{2})\.(\d{2})_(\d{2})\.(\d{2})'
Get-ChildItem D:\temp -Recurse | Foreach-Object{
if($_.Name -match $pattern)
{
$NewName = "{0}_{1}{2}{3}_{4}{5}.{6}" -f $matches[1],$matches[3],$matches[4],$matches[5],$matches[6],$matches[7],$matches[2]
Rename-Item $_ -NewName $NewName
}
}
很快就有一种叫做砖块的东西
$pattern = '^([^\.]+)\.(csv|xls|pdf)\.(\d{2})\.(\d{2})\.(\d{2})_(\d{2})\.(\d{2})'
Get-ChildItem D:\temp -Recurse | Foreach-Object{
if($_.Name -match $pattern)
{
$NewName = "{0}_{1}{2}{3}_{4}{5}.{6}" -f $matches[1],$matches[3],$matches[4],$matches[5],$matches[6],$matches[7],$matches[2]
Rename-Item $_ -NewName $NewName
}
}
下面是使用格式字符串创建新名称的另一种方法。括号中的每组模式字符表示要捕获的文件名的一部分,稍后在$NewName中使用以形成新文件名:
下面是使用格式字符串创建新名称的另一种方法。括号中的每组模式字符表示要捕获的文件名的一部分,稍后在$NewName中使用以形成新文件名: