我想做一个备份,但不需要符号链接。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 中,则必须指定完整路径。Folder
dir /al /s /b >exclusions.txt
/s
7z 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));
//