使用PowerShell处理文件重命名

在本文中,将探讨如何使用PowerShell脚本从SQL数据库中读取文件路径,并根据当前日期对文件进行重命名。这是一个常见的需求,尤其是在需要自动化文件管理任务时。

数据库表结构

首先,需要一个数据库表来存储文件路径。以下是一个简单的SQL脚本,用于创建这样一个表:

USE [SachaTest]; GO CREATE TABLE [dbo].[Files]( [FilePath] NVARCHAR(MAX) NOT NULL ) ON [PRIMARY];

接下来,将向这个表中插入一些文件路径:

INSERT INTO [SachaTest].[dbo].[Files] ([FilePath]) VALUES ('C:\Users\barbers\Desktop\PowerShellTest\dummy1.txt'); GO INSERT INTO [SachaTest].[dbo].[Files] ([FilePath]) VALUES ('C:\Users\barbers\Desktop\PowerShellTest\dummy2.txt'); GO

这些文件路径将作为接下来脚本处理的基础。

PowerShell脚本编写

接下来,将编写一个PowerShell脚本来处理这些文件。脚本的主要任务是:

  • 建立与SQL数据库的连接
  • 数据库表中读取文件路径
  • 检查文件是否存在
  • 如果文件存在,则根据当前日期重命名文件

以下是完整的PowerShell脚本:

# 建立SQL连接,并从"Files"表中获取数据 $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = "Data Source=omnidev;Initial Catalog=SachaTest;Integrated Security=True;Timeout=180;MultipleActiveResultSets=true;" $SqlCmd = New-Object System.Data.SqlClient.SqlCommand $SqlCmd.CommandText = "select * from Files" $SqlCmd.Connection = $SqlConnection $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter $SqlAdapter.SelectCommand = $SqlCmd $DataSet = New-Object System.Data.DataSet $SqlAdapter.Fill($DataSet) $SqlConnection.Close() # 处理每个DataRow,获取FilePath列的值,并创建新文件 Function ProcessFile (){ Process { $fileOnDisk = New-Object -TypeName System.IO.FileInfo($_["FilePath"]) write-host "full name is: " + $fileOnDisk.FullName $datePartForFile = (Get-Date -format d).Replace("/","") $justFileName = [System.IO.Path]::GetFileNameWithoutExtension($fileOnDisk.FullName) $newFileName = $fileOnDisk.DirectoryName + '\' + $justFileName + '_' + $datePartForFile + $fileOnDisk.Extension write-host "new file name is: " + $newFileName If (Test-Path $newFileName){ Remove-Item $newFileName } [System.IO.File]::Copy($fileOnDisk.FullName, $newFileName); } } # 跳过空对象的过滤器 filter Skip-Null { $_|?{ $_ } } # 遍历DataSet.Tables[0](即Files表),然后处理每个文件 $DataSet.Tables[0] | Select-Object $_.Rows | Skip-Null | ProcessFile
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485