7zip 创建存档并忽略 Windows 上的任何符号链接

7zip 创建存档并忽略 Windows 上的任何符号链接

我想做一个备份,但不需要符号链接。7zip 有 tar 和 wim 的符号链接选项。

是否选中或取消选中“存储符号链接”以省略它们?

编辑:我正在使用上下文菜单中的“添加到存档”。我只想要我想要备份的目录中实际存在的文件。我不需要与符号链接链接的文件/目录。

答案1

是否选中或取消选中“存储符号链接”以省略它们?

GUI 选项:

Menu>> File...Link创建符号链接或硬链接

命令行选项:

-snl将符号链接存储为链接(仅限 WIM 和 TAR 格式)

来源 7Zip 帮助文件 (Windows)

答案2

在 GUI 中,如果你使用添加到档案,将仅显示 .tar 和 .wim 文件的复选框(我不明白为什么他们不为 .zip、.7z 和其他格式做这件事):-(

我们必须发挥一些创造力。我们可以创建一个包含所有符号链接的排除文件。首先打开命令提示符并运行文件夹位置。现在运行cd "Folder"。开关用于递归,如果不需要,可以省略它。假设 7z.exe 在您的 PATH 中,然后运行其中“名称”是存档名称,“文件夹”是文件夹名称。如果 7z.exe 不在 PATH 中,则必须指定完整路径。Folderdir /al /s /b >exclusions.txt/s7z a "name.7z" "folder\" [email protected]

为了使整个过程更加灵活,您可以添加上下文菜单条目:

  • 首先用以下代码创建一个批处理文件:
@echo off
dir /al /b /s %1 >exclusions.txt 2>nul
"C:\Program Files (x86)\7-zip\7z.exe" a "%~na.7z" "%~1\" [email protected] >nul 2>&1
del /f /q exclusions.txt

注:可以修改7z.exe的路径。

  • 以管理员身份打开注册表编辑器。
  • 现在转到HKEY_CLASSES_ROOT\Folder\shell
  • 创建一个名为 的新键Add to archive without symbolic links 7-zip
  • 然后创建一个名为的子项command
  • 将命令键的默认值设置为"Full path of the .bat file" "%1"

然后,当您右键单击文件夹时,您会发现一个名为“添加到没有符号链接的存档 7-zip”的上下文菜单。

默认情况下,存档将在当前工作目录中创建,名为archive.7z(7z 格式)。修改后的脚本将要求您输入存档名称和格式:

@echo off
dir /al /b /s %1 >exclusions.txt 2>nul
set /p a_name=Enter Archive name:
set /p a_fo=Enter archive format(Without extension):
if "%a_fo:~0,1%"=="." set "a_fo=%a_fo:~1%"
"C:\Program Files (x86)\7-zip\7z.exe" a "%a_name%.%a_fo%" "%~1\" [email protected] >nul 2>&1
del /f /q exclusions.txt

现在,为了使脚本更加有用,您可以阅读帮助文档并根据需要添加选项。我将准备一个 GUI 解决方案(使用 .NET WinForms 和 Powershell) 在几天内。

另一个具有自动 UAC 提升和上下文菜单创建的功能:

goto="Batch" /*
:Admin
@echo off
reg query "HKEY_CLASSES_ROOT\Folder\shell\Add to archive without symbolic links 7zip" >nul 2>&1
if %errorlevel% equ 1 (
  reg add "HKEY_CLASSES_ROOT\Folder\shell\Add to archive without symbolic links 7zip"
  reg add "HKEY_CLASSES_ROOT\Folder\shell\Add to archive without symbolic links 7zip\command" 
  reg add "HKEY_CLASSES_ROOT\Folder\shell\Add to archive without symbolic links 7zip\command" /f /v "(Default)" /t REG_SZ /d "Bat file path %1" %== Replace Bat file path here ==%
)
dir /al /b /s %1 >exclusions.txt 2>nul
set /p a_name=Enter Archive name:
set /p a_fo=Enter archive format(Without extension):
if "%a_fo:~0,1%"=="." set "a_fo=%a_fo:~1%"
"C:\Program Files (x86)\7-zip\7z.exe" a "%a_name%.%a_fo%" "%~1\" [email protected] >nul 2>&1
del /f /q exclusions.txt
exit /b 0
:RunAsAdmin
color 4f & echo Running Admin Shell, Please wait.... & call cscript //nologo /e:JScript "%~f0" RunAsAdmin "%1" & exit /b
:"Batch"
@echo off & setlocal enabledelayedexpansion & cls
openfiles >nul 2>&1 || goto :RunAsAdmin
goto :Admin
:"JScript" */
function RunAsAdmin(self, arguments) { WSH.CreateObject('Shell.Application').ShellExecute(self, arguments, '', 'runas', 1) }
if (WSH.Arguments.length>=1 && WSH.Arguments(0)=='RunAsAdmin') RunAsAdmin(WSH.ScriptFullName,WSH.Arguments(1));
//

相关内容