Windows链接创建神器:一键生成符号链接与硬链接的智能批处理工具【NuGet】

【自用工具】NuGet 或各项目中共用部分目录或文件,利用DOS符号链接解决重复文件的多份拷贝,起到节省磁盘空间的作用。 告别复杂的命令行操作!这款增强版批处理脚本让Windows链接创建变得简单、直观且美观

在Windows系统中,符号链接硬链接 是强大的文件系统功能,它们允许我们创建文件或目录的"虚拟副本",而无需占用额外磁盘空间。然而,使用传统的命令行工具创建这些链接往往令人望而生畏 - 直到现在!

为什么要使用链接?

  • 节省磁盘空间 :多个位置访问同一文件,无需复制

  • 跨磁盘访问 :符号链接允许不同磁盘间的无缝访问

  • 开发效率 :在多个项目间共享库文件而无需同步

  • 系统优化 :将占用空间大的目录重定向到其他驱动器

传统方法的痛点

复制代码
mklink /D "C:\Link" "D:\Target"

传统方法需要:

  • 记忆复杂的命令参数

  • 手动处理路径冲突

  • 没有错误诊断

  • 纯文本界面不直观

  • 必须使用管理员权限

解决方案:智能链接创建工具

我开发了一款功能强大的批处理脚本,解决了所有这些问题:

主要功能亮点

功能 描述 优势
直观菜单界面 所有功能一目了然 无需记忆命令参数
智能路径验证 自动检查路径存在性 防止无效操作
冲突解决方案 自动处理已存在路径 安全删除或重命名
实时错误诊断 详细错误原因分析 快速解决问题
视觉反馈系统 留给大家自己创作 按自己的习惯调整

技术特点

  • ANSI转义序列 :视觉反馈的方式建议用这个技术来实现

  • 错误代码处理 :捕获并解释所有可能错误

  • 路径规范化 :自动处理引号和特殊字符

  • 缓存延迟处理 :解决文件系统刷新问题

  • 管理员权限检测 :确保操作成功执行

使用指南

安装与运行

  1. 将脚本保存为 CreateLink.cmd

  2. 右键选择"以管理员身份运行"

使用示例

场景1:创建跨磁盘目录符号链接

复制代码
 1. 选择 [1] 目录符号链接
 2. 源路径: D:\Project\Assets
 3. 链接路径: C:\CurrentProject\Assets

场景2:为大型数据文件创建硬链接

复制代码
 1. 选择 [3] 硬链接
 2. 源路径: E:\Data\dataset.bin
 3. 链接路径: E:\Analysis\input.bin

实际应用场景

开发环境配置

复制代码
 [目录符号链接] 将公共库链接到多个项目:
  源路径: D:\Dev\SharedLib
  链接路径: C:\ProjectA\libs\SharedLib
  链接路径: C:\ProjectB\vendor\SharedLib

游戏资源管理

复制代码
 [文件符号链接] 在不同MOD间共享资源:
  源路径: E:\Games\Assets\textures.pak
  链接路径: C:\Mod1\resources\textures.pak
  链接路径: C:\Mod2\assets\textures.pak

数据科学工作流

复制代码
 [硬链接] 在不同分析中重用大型数据集:
  源路径: F:\Datasets\2023\financial.csv
  链接路径: F:\Analysis\Q1\input.csv
  链接路径: F:\Analysis\Q2\source.csv

获取脚本

复制代码
 @echo off
 setlocal enabledelayedexpansion
 ​
 :MAIN_MENU
 cls

        echo.

          echo ==============================

             echo     Windows 链接创建工具By liuxw

               echo ==============================

                  echo 1. 创建目录符号链接 (支持跨磁盘)

                     echo 2. 创建文件符号链接 (支持跨磁盘)

                        echo 3. 创建硬链接 (仅限同一磁盘的文件)

                           echo 4. 退出

                              echo.

                               ​

                               choice /c 1234 /n /m "请选择操作类型 [1-4]: "

                               if %errorlevel% equ 1 goto SYMBOLIC_DIR

                               if %errorlevel% equ 2 goto SYMBOLIC_FILE

                               if %errorlevel% equ 3 goto HARD_LINK

                               if %errorlevel% equ 4 exit /b

                               ​

                               :SYMBOLIC_DIR

                               set "link_type=/D"

                               set "type_name=目录符号链接"

                               goto GET_PATHS

                               ​

                               :SYMBOLIC_FILE

                               set "link_type="

                               set "type_name=文件符号链接"

                               goto GET_PATHS

                               ​

                               :HARD_LINK

                               set "link_type=/H"

                               set "type_name=硬链接"

                               ​

                               :GET_PATHS

                               echo.

                               echo 正在创建: [%type_name%]

                               echo.

                               ​

                               :GET_TARGET

                               set /p "target_path=请输入源文件/目录路径: "

                               if not exist "!target_path!" (

                                   echo.

                                   echo [错误] 源路径不存在: "!target_path!"

                                   echo 请检查路径是否正确

                                   echo.

                                  pause

                                  goto GET_TARGET

                               )

                               ​

                               :GET_LINK

                               set /p "link_path=请输入链接创建路径: "

                               if exist "!link_path!" (

                                   echo.

                                   echo [警告] 链接路径已存在: "!link_path!"

                                  choice /c YN /n /m "是否删除现有路径? [Y/N]: "

                                   if !errorlevel! equ 2 goto GET_LINK

                                   

                                   echo 正在删除现有路径...

                                  rd /s /q "!link_path!" 2>nul

                                   if exist "!link_path!" (

                                      del /f /q "!link_path!" 2>nul

                                  )

                                   

                                   if exist "!link_path!" (

                                       echo.

                                       echo [错误] 无法删除现有路径,可能被占用或无权限

                                       echo 请手动删除或选择其他路径

                                       echo.

                                      pause

                                      goto GET_LINK

                                  )

                               )

                               ​

                               :VALIDATE_HARD_LINK

                               if "%link_type%"=="/H" (

                                  rem 检查硬链接限制

                                   for %%d in ("!target_path!") do set "target_drive=%%~d"

                                   for %%d in ("!link_path!") do set "link_drive=%%~d"

                                   

                                   if not "!target_drive!"=="!link_drive!" (

                                       echo.

                                       echo [错误] 硬链接要求源文件和链接文件在同一磁盘

                                       echo 源文件磁盘: !target_drive!

                                       echo 链接磁盘: !link_drive!

                                       echo.

                                      pause

                                      goto GET_LINK

                                  )

                                   

                                  rem 检查是否为文件

                                   if exist "!target_path!\" (

                                       echo.

                                       echo [错误] 硬链接只能用于文件,不能用于目录

                                       echo.

                                      pause

                                      goto GET_LINK

                                  )

                               )

                               ​

                               :CREATE_LINK

                               echo.

                               echo 正在创建链接...

                               echo 源路径: "!target_path!"

                               echo 链接路径: "!link_path!"

                               echo.

                               ​

                               mklink %link_type% "!link_path!" "!target_path!" 2>nul

                               if %errorlevel% equ 0 (

                                   echo [成功] %type_name% 创建成功!

                                   echo.

                                   

                               ) else (

                                   echo.

                                   echo [错误] 链接创建失败 (错误代码: %errorlevel%)

                               )

                               ​

                               echo.

                               echo 请手动验证链接:

                               echo 1. 检查链接路径: "!link_path!"

                               echo 2. 尝试访问该位置

                               echo 3. 查看属性中的"目标"字段

                               echo.

                               ​

                               echo 如果发现没有建立成功,可能原因:

                               echo - 未使用管理员权限运行

                               echo - 路径包含无效字符

                               echo - 文件系统不支持此链接类型

                               echo - 目标路径不存在

                               ​

                               pause

                               goto MAIN_MENU

结语

这款增强版链接创建工具将复杂的命令行操作转化为直观的用户体验,通过:

  1. 智能验证 :自动检查路径和权限

  2. 错误预防 :详细的诊断信息

  3. 安全机制 :谨慎处理文件操作

无论您是开发人员、系统管理员还是高级用户,这个工具都能显著提高您在Windows系统中管理文件和目录的效率。