如何压缩更改名称的文件夹
How to Compress a Folder That Changes name
我正在尝试压缩更改名称的文件夹。
示例:
C:2004
C:2005
C:2006
C:2007
随着时间的流逝,它不断创建一个新文件夹。
我只想压缩对应当月的文件夹
从 powershell
的 Get_date
命令获得一些帮助:
@echo off
for /f "tokens=1 delims=" %%a in ('PowerShell -Command "& {Get-Date -format "yyyyMM"}"') do if exist "C:\%%a" echo C:\%%a
将 echo C:\%%a
替换为实际压缩命令的位置。
更好的方法是测试最新创建的文件夹,然后仅压缩该文件夹。
@echo off
for /f "delims=" %%i in ('dir "c:*" /b /ad /o-d') do set "latest=%%i" & goto :comp
:comp
echo Zip/7z/rar "c:\%latest%" here
或者我们可以结合上面的找到最新的文件夹,然后测试它是否对应月份,然后再压缩它:
@echo off
@echo off
for /f "delims=" %%i in ('dir "c:*" /b /ad /o-d') do set "latest=%%i" & goto :comp
:comp
for /f "tokens=1 delims=" %%a in ('PowerShell -Command "& {Get-Date -format "yyyyMM"}"') do if "%%a" == "%latest%" echo Zip/7z/Rar C:\%latest% here
如果你有 powershell 5+
$date = Get-Date -Format "yyyyMM"
Compress-Archive -Path "c:$date\" -DestinationPath "c:$date.zip"
我看到你已经选择了一个答案。能够压缩当月以外的目录可能会很好。如果存档文件不存在,此代码将压缩所有这些文件。默认情况下,它只会压缩当前月份。
=== 压缩每月文件。ps1
#Requires -Version 5
[CmdletBinding()]
param (
[Parameter(Mandatory=$false)]
[switch]$AllMonths = $false
)
$BaseDir = 'C:\src\t'
$CompDir = 'C:\src\t\Compressed\Months'
$DirFilter = if ($AllMonths) { '??????' } else { Get-Date -Format 'yyyyMM'}
Get-ChildItem -Directory -Path $BaseDir -Filter $DirFilter |
ForEach-Object {
# Check to see that the directory name is exactly six (6) digits
if ($_.Name -match '^\d{6}$') {
$ArchiveFilename = Join-Path -Path $CompDir -ChildPath "$($_.Name).zip"
# If the archive file does not exist, create it
if (-not (Test-Path -Path $ArchiveFilename)) {
Compress-Archive -Path $_.FullName -DestinationPath $ArchiveFilename
}
}
}
调用它以仅压缩当前月份使用:
powershell -NoLogo -NoProfile -File .\Compress-MonthlyFiles.ps1
如果所有月份的存档文件不存在,请使用:
powershell -NoLogo -NoProfile -File .\Compress-MonthlyFiles.ps1 -AllMonths
我正在尝试压缩更改名称的文件夹。
示例:
C:2004
C:2005
C:2006
C:2007
随着时间的流逝,它不断创建一个新文件夹。
我只想压缩对应当月的文件夹
从 powershell
的 Get_date
命令获得一些帮助:
@echo off
for /f "tokens=1 delims=" %%a in ('PowerShell -Command "& {Get-Date -format "yyyyMM"}"') do if exist "C:\%%a" echo C:\%%a
将 echo C:\%%a
替换为实际压缩命令的位置。
更好的方法是测试最新创建的文件夹,然后仅压缩该文件夹。
@echo off
for /f "delims=" %%i in ('dir "c:*" /b /ad /o-d') do set "latest=%%i" & goto :comp
:comp
echo Zip/7z/rar "c:\%latest%" here
或者我们可以结合上面的找到最新的文件夹,然后测试它是否对应月份,然后再压缩它:
@echo off
@echo off
for /f "delims=" %%i in ('dir "c:*" /b /ad /o-d') do set "latest=%%i" & goto :comp
:comp
for /f "tokens=1 delims=" %%a in ('PowerShell -Command "& {Get-Date -format "yyyyMM"}"') do if "%%a" == "%latest%" echo Zip/7z/Rar C:\%latest% here
如果你有 powershell 5+
$date = Get-Date -Format "yyyyMM"
Compress-Archive -Path "c:$date\" -DestinationPath "c:$date.zip"
我看到你已经选择了一个答案。能够压缩当月以外的目录可能会很好。如果存档文件不存在,此代码将压缩所有这些文件。默认情况下,它只会压缩当前月份。
=== 压缩每月文件。ps1
#Requires -Version 5
[CmdletBinding()]
param (
[Parameter(Mandatory=$false)]
[switch]$AllMonths = $false
)
$BaseDir = 'C:\src\t'
$CompDir = 'C:\src\t\Compressed\Months'
$DirFilter = if ($AllMonths) { '??????' } else { Get-Date -Format 'yyyyMM'}
Get-ChildItem -Directory -Path $BaseDir -Filter $DirFilter |
ForEach-Object {
# Check to see that the directory name is exactly six (6) digits
if ($_.Name -match '^\d{6}$') {
$ArchiveFilename = Join-Path -Path $CompDir -ChildPath "$($_.Name).zip"
# If the archive file does not exist, create it
if (-not (Test-Path -Path $ArchiveFilename)) {
Compress-Archive -Path $_.FullName -DestinationPath $ArchiveFilename
}
}
}
调用它以仅压缩当前月份使用:
powershell -NoLogo -NoProfile -File .\Compress-MonthlyFiles.ps1
如果所有月份的存档文件不存在,请使用:
powershell -NoLogo -NoProfile -File .\Compress-MonthlyFiles.ps1 -AllMonths