复制指定文件夹并批量重命名子文件夹、子文件为指定文件名
问
输入数值1
输入数字2
把“输入数值1”这个目录复制并重命名“输入数字2”,且把子目录及文件符合“输入数值1”也重命名为“输入数字2”
如“输入数值1”输入2024,“输入数值2”输入2025。把“C:\path\to\destination\2024”复制成“C:\path\to\destination\2025”
子目录里的电-2024年01月01日、付款凭证-2024年01月02日...等,重命名为电-2025年01月01日、付款凭证-2025年01月02日...
等子文件修改完成10秒后,子文件夹2024-01、2024-02...2024-12等,重命名为2025-01、2025-02...2025-12
答
要实现您的需求,我们需要编写一个PowerShell脚本,该脚本将执行以下操作:
复制名为“输入数值1”(例如2024)的目录,并将其重命名为“输入数值2”(例如2025)。
递归地遍历新复制目录中的所有文件和子目录。
对于文件名中包含“输入数值1”的文件,将其重命名为包含“输入数值2”的新名称。
等待10秒钟。
对于子目录名中包含“输入数值1”-月份格式的目录,将其重命名为包含“输入数值2”-月份格式的新名称。
以下是一个满足您需求的PowerShell脚本示例:
# 参数输入 param ( [string]$sourceYear = "2024", [string]$targetYear = "2025" ) # 定义源目录路径 $sourceDirPath = "C:\path\to\destination\$sourceYear" # 定义目标目录路径 $targetDirPath = "C:\path\to\destination\$targetYear" # 检查源目录是否存在 if (!(Test-Path -Path $sourceDirPath)) { Write-Host "源目录不存在: $sourceDirPath" -ForegroundColor Red exit } # 复制源目录到目标目录,包括所有子目录和文件 Copy-Item -Path $sourceDirPath -Destination $targetDirPath -Recurse -Force # 获取目标目录中的所有文件,并重命名 $files = Get-ChildItem -Path $targetDirPath -Recurse -File foreach ($file in $files) { if ($file.Name -match $sourceYear) { $newName = $file.Name -replace $sourceYear, $targetYear $newFullPath = Join-Path -Path $file.DirectoryName -ChildPath $newName Rename-Item -Path $file.FullName -NewName $newFullPath } } # 等待10秒钟 Start-Sleep -Seconds 10 # 获取目标目录中的所有子目录,并重命名 $directories = Get-ChildItem -Path $targetDirPath -Directory foreach ($directory in $directories) { if ($directory.Name -match "\d{4}-\d{2}$") { # 匹配格式为 YYYY-MM 的目录 $newName = $directory.Name -replace $sourceYear, $targetYear $newFullPath = Join-Path -Path $directory.Parent.FullName -ChildPath $newName Rename-Item -Path $directory.FullName -NewName $newFullPath } } Write-Host "脚本执行完毕。" -ForegroundColor Magenta
使用说明:
将上述脚本保存为一个
.ps1
文件,例如CopyAndRename.ps1
。
.\CopyAndRename.ps1
注意事项:
请将
$sourceDirPath
和$targetDirPath
的路径更改为实际的源目录和目标目录路径。
脚本中的
-match "\d{4}-\d{2}$"
用于匹配格式为YYYY-MM
的目录,如果您的目录格式不同,请相应地修改正则表达式。脚本使用了
Start-Sleep -Seconds 10
来等待10秒钟,然后再继续执行子目录的重命名操作。在运行脚本之前,请确保您有足够的权限来访问和修改这些目录和文件。
如果目录或文件正在被其他程序使用,重命名操作可能会失败。在这种情况下,请关闭占用这些文件的应用程序,然后再次尝试运行脚本。
或
要实现您描述的功能,我们可以编写一个PowerShell脚本,该脚本将接收两个输入参数:输入数值1
(例如2024)和输入数值2
(例如2025),然后根据这些参数执行目录和文件的复制与重命名操作。
以下是一个示例PowerShell脚本:
# 参数输入
param (
[string]$sourceYear, # 输入要替换的源年份,例如2024
[string]$targetYear # 输入要替换成的新年份,例如2025
)
# 定义源目录路径
$sourceDirPath = "C:\path\to\destination\$sourceYear"
# 定义目标目录路径
$targetDirPath = "C:\path\to\destination\$targetYear"
# 检查源目录是否存在
if (!(Test-Path -Path $sourceDirPath)) {
Write-Host "源目录不存在: $sourceDirPath" -ForegroundColor Red
exit
}
# 复制源目录到目标目录,包括所有子目录和文件
Copy-Item -Path $sourceDirPath -Destination $targetDirPath -Recurse -Force
# 获取目标目录中的所有文件,并重命名
$files = Get-ChildItem -Path $targetDirPath -Recurse -File
foreach ($file in $files) {
if ($file.Name -match $sourceYear) {
$newName = $file.Name -replace $sourceYear, $targetYear
$newFullPath = Join-Path -Path $file.DirectoryName -ChildPath $newName
Rename-Item -Path $file.FullName -NewName $newFullPath
}
}
# 等待10秒钟
Start-Sleep -Seconds 10
# 获取目标目录中的所有子目录,并重命名
$directories = Get-ChildItem -Path $targetDirPath -Directory
foreach ($directory in $directories) {
if ($directory.Name -match "\d{4}-\d{2}$") { # 匹配格式为 YYYY-MM 的目录
$newName = $directory.Name -replace $sourceYear, $targetYear
$newFullPath = Join-Path -Path $directory.Parent.FullName -ChildPath $newName
Rename-Item -Path $directory.FullName -NewName $newFullPath
}
}
Write-Host "脚本执行完毕。" -ForegroundColor Magenta
使用说明:
将上述脚本保存为一个
.ps1
文件,例如CopyAndRename.ps1
。打开PowerShell,导航到脚本所在的目录。
执行脚本,并提供
输入数值1
和输入数值2
作为参数,例如:
.\CopyAndRename.ps1 -sourceYear 2024 -targetYear 2025
脚本说明:
脚本首先接收两个参数:
sourceYear
和targetYear
。然后,它定义源目录和目标目录的路径。
接下来,脚本检查源目录是否存在。如果不存在,则输出一条消息并退出。
如果源目录存在,脚本使用
Copy-Item
命令复制源目录及其所有内容到目标目录。然后,脚本获取目标目录中的所有子目录和文件,并遍历它们。
对于每个子目录和文件,脚本使用
-replace
操作符将名称中的sourceYear
替换为targetYear
,然后构造新的完整路径,并使用Rename-Item
命令进行重命名。最后,脚本输出一条消息表示操作成功。
请确保在运行脚本之前备份您的数据,以防万一出现意外情况导致数据丢失。此外,如果您的目录结构或文件命名与示例中的不同,您可能需要相应地修改脚本中的路径和替换逻辑。