概述说明

Windows系统下,samba的使用(客户端层面)技巧记录;

常用命令

查看当前存在的网络连结:

net use

删除指定IP的连结:

net use \\192.168.31.10\IPC$ /delete

删除所有连结:

net use * /delete /y

使用指定凭证连结服务器:

net use \\192.168.31.10 /user:userName "password" /persistent:yes
  • 凭据管理相关命令:

删除旧凭据(如果存在):

cmdkey /delete:192.168.31.10

保存凭据到凭据管理器:

cmdkey /add:192.168.31.10 /user:userName /pass:password

验证凭据是否保存:

cmdkey /list | findstr "192.168.31.10"

删除凭证

如果对于某个服务器,在登录samba的时候,勾选了保存账号密码,那么想要更换,就要先删除已保存的凭证.

  • Step1:
    按 Win + R 输入 control.exe /name Microsoft.CredentialManager
    或者,搜索凭据管理器:../../Files/PixPin_2025-08-04_10-24-29.png
    然后删除对应服务器的凭证即可:../../Files/PixPin_2025-08-03_16-59-35.png

挂载到目录

Windows默认挂载Samba是挂载到磁盘(映射网络驱动器),但是这种情况下,如果Samba服务端有很多共享目录,会造成本地占用多盘符,那么目前没有很官方的方法将Samba挂载到本地目录.但是有间接的方法.
这个方法的原理就是,首先保存指定服务器的凭据(账号密码)到Windows凭据,然后使用mklink的方式创建远程服务端的软链到Windows本地的指定文件夹.这样就完成了间接的挂载到本地文件夹.而且,因为保存了凭据,每次重启电脑以后挂载也不会失效,因为当我们需要访问本地的软链的时候,就会自动使用 Windows凭据里保存的账号密码进行验证授权.

在Windows终端中执行(注意修改为实际的账号密码)命令,添加凭据:

cmdkey /add:192.168.31.10 /user:user /pass:Nnn123

从下图可以看到,凭据添加成功../../Files/PixPin_2025-08-04_21-52-57.png

本地目录不能提前创建,不然会失败

比如下面的D:SMB\Down,不能存在Down目录,但是D:SMB必须存在

然后执行创建软链接命令(管理员权限):

New-Item -ItemType SymbolicLink -Path "D:\SMB\Down" -Target "\\192.168.31.10\Downloads"

如果是CMD的话,命令如下(管理员权限):

mklink /D D:\SMB\Down \\192.168.31.10\Downloads

然后就挂载成功了:
../../Files/PixPin_2025-08-04_22-11-15.png

挂载脚本

下面是一键挂载脚本(mount_samba.bat):

@echo off
:: ==============================================
:: Samba共享一键挂载脚本
:: 功能:将远程Samba共享挂载到本地目录
:: 要求:必须以管理员权限运行
:: ==============================================

:: ----------------------------
:: 用户可修改的常量(请根据实际情况调整)
:: ----------------------------
:: 服务器IP地址
set SERVER_IP=192.168.31.10
:: 要挂载的共享文件夹名称
set SHARE_PATH=Downloads
:: Samba登录用户名
set USERNAME=user
:: Samba登录密码
set PASSWORD=Nnn123
:: 本地挂载目录路径(必须是完整路径)
set LOCAL_DIR=D:\SMB\Down

:: ----------------------------
:: 颜色定义(无需修改)
:: ----------------------------
set RED=0C     &:: 错误信息(红色)
set GREEN=0A   &:: 成功信息(绿色)
set YELLOW=0E  &:: 警告信息(黄色)
set BLUE=09    &:: 操作信息(蓝色)
set RESET=07   &:: 恢复默认颜色)

:: ==============================================
:: 主程序开始(以下内容不建议修改)
:: ==============================================

:: 1. 检查管理员权限
:: ----------------------------
net session >nul 2>&1
if %errorLevel% neq 0 (
    color %RED%
    echo [错误] 请使用管理员权限运行此脚本!
    echo 请在脚本上右键选择"以管理员身份运行"
    pause
    exit /b 1
)

:: 2. 测试服务器连通性
:: ----------------------------
color %BLUE%
echo [信息] 正在测试服务器 %SERVER_IP% 的连通性...
ping -n 2 %SERVER_IP% >nul
if %errorLevel% neq 0 (
    color %RED%
    echo [错误] 无法连接到服务器 %SERVER_IP%,请检查:
    echo 1. 服务器是否开机
    echo 2. 网络连接是否正常
    echo 3. IP地址是否正确
    pause
    exit /b 1
)

:: 3. 验证Samba凭据
:: ----------------------------
color %BLUE%
echo [信息] 正在验证Samba凭据(用户:%USERNAME%)...
net use \\%SERVER_IP%\%SHARE_PATH% /user:%USERNAME% %PASSWORD% /persistent:no >nul 2>&1
if %errorLevel% neq 0 (
    color %RED%
    echo [错误] 凭据验证失败!可能原因:
    echo 1. 用户名或密码错误
    echo 2. 共享路径 %SHARE_PATH% 不存在
    echo 3. 用户没有访问权限
    pause
    exit /b 1
)
net use \\%SERVER_IP%\%SHARE_PATH% /delete >nul 2>&1

:: 4. 存储凭据到Windows凭据管理器
:: ----------------------------
color %BLUE%
echo [信息] 正在存储凭据到Windows凭据管理器...
cmdkey /delete:%SERVER_IP% >nul 2>&1
cmdkey /add:%SERVER_IP% /user:%USERNAME% /pass:%PASSWORD% >nul
if %errorLevel% neq 0 (
    color %YELLOW%
    echo [警告] 凭据存储失败(可能被组策略限制)
    echo 重启后可能需要重新输入密码
)

:: 5. 检查本地目录结构
:: ----------------------------
:: 提取父目录(D:\SMB)
for %%A in ("%LOCAL_DIR%") do set PARENT_DIR=%%~dpA
set PARENT_DIR=%PARENT_DIR:~0,-1%

if not exist "%PARENT_DIR%\" (
    color %YELLOW%
    echo [信息] 正在创建父目录 %PARENT_DIR%...
    mkdir "%PARENT_DIR%"
    if %errorLevel% neq 0 (
        color %RED%
        echo [错误] 父目录创建失败!
        echo 请检查路径是否合法或是否有写入权限
        pause
        exit /b 1
    )
)

if exist "%LOCAL_DIR%\" (
    color %RED%
    echo [错误] 目标目录已存在:%LOCAL_DIR%
    echo 请先手动删除该目录后再运行本脚本
    pause
    exit /b 1
)

:: 6. 创建符号链接
:: ----------------------------
color %BLUE%
echo [信息] 正在创建符号链接...
mklink /D "%LOCAL_DIR%" "\\%SERVER_IP%\%SHARE_PATH%" >nul
if %errorLevel% neq 0 (
    color %RED%
    echo [错误] 符号链接创建失败!
    echo 可能原因:
    echo 1. 没有创建符号链接的权限
    echo 2. 系统符号链接功能被禁用
    pause
    exit /b 1
)

:: 7. 完成提示并打开目录
:: ----------------------------
color %GREEN%
echo ==============================================
echo [成功] Samba共享已成功挂载!
echo.
echo 远程路径:\\%SERVER_IP%\%SHARE_PATH%
echo 本地路径:%LOCAL_DIR%
echo.
echo 提示:
echo 1. 重启后仍可自动连接(凭据已保存)
echo 2. 按回车键将打开挂载目录并退出
echo ==============================================
color %RESET%
pause >nul

:: 自动打开挂载目录
start "" "%LOCAL_DIR%"

exit /b 0

挂载脚本Pro

下面的脚本可以实现全自动挂载,输入数字即可:
../../Files/PixPin_2025-08-05_09-44-37.png

脚本内容(mount_samba_pro.bat):

@echo off
:: ==============================================
:: Samba共享一键挂载脚本(增强版)
:: 要求:必须以管理员权限运行
:: ==============================================

:: ----------------------------
:: 用户可修改的常量(请根据实际情况调整)
:: ----------------------------
:: 服务器IP地址
set SERVER_IP=192.168.31.10
:: Samba登录用户名
set USERNAME=user
:: Samba登录密码
set PASSWORD=Han123
:: 本地挂载根目录(共享将挂载到此目录下)
set LOCAL_ROOT_DIR=G:\Samba
:: 临时文件路径
set TEMP_FILE=%TEMP%\samba_shares.tmp

:: ----------------------------
:: 颜色定义(无需修改)
:: ----------------------------
set RED=0C     &:: 错误信息(红色)
set GREEN=0A   &:: 成功信息(绿色)
set YELLOW=0E  &:: 警告信息(黄色)
set BLUE=09    &:: 操作信息(蓝色)
set RESET=07   &:: 恢复默认颜色)

:: ==============================================
:: 主程序开始
:: ==============================================

:: 1. 检查管理员权限
:: ----------------------------
net session >nul 2>&1
if %errorLevel% neq 0 (
    color %RED%
    echo [错误] 请使用管理员权限运行此脚本!
    echo 请在脚本上右键选择"以管理员身份运行"
    pause
    exit /b 1
)

:: 2. 测试服务器连通性
:: ----------------------------
color %BLUE%
echo [信息] 正在测试服务器 %SERVER_IP% 的连通性...
ping -n 2 %SERVER_IP% >nul
if %errorLevel% neq 0 (
    color %RED%
    echo [错误] 无法连接到服务器 %SERVER_IP%,请检查:
    echo 1. 服务器是否开机
    echo 2. 网络连接是否正常
    echo 3. IP地址是否正确
    pause
    exit /b 1
)

:: 3. 验证Samba凭据
:: ----------------------------
color %BLUE%
echo [信息] 正在验证Samba凭据(用户:%USERNAME%)...
net use \\%SERVER_IP%\IPC$ /user:%USERNAME% %PASSWORD% /persistent:no >nul 2>&1 || (
    color %RED%
    echo [错误] 凭据验证失败!可能原因:
    echo 1. 用户名或密码错误
    echo 2. 用户没有访问权限
    pause
    exit /b 1
)
net use \\%SERVER_IP%\IPC$ /delete >nul 2>&1

:: 4. 存储凭据到Windows凭据管理器
:: ----------------------------
color %BLUE%
echo [信息] 正在存储凭据到Windows凭据管理器...
cmdkey /delete:%SERVER_IP% >nul 2>&1
cmdkey /add:%SERVER_IP% /user:%USERNAME% /pass:%PASSWORD% >nul
if %errorLevel% neq 0 (
    color %YELLOW%
    echo [警告] 凭据存储失败(可能被组策略限制)
    echo 重启后可能需要重新输入密码
)

:: 5. 检查本地根目录
:: ----------------------------
setlocal enabledelayedexpansion
if not exist "!LOCAL_ROOT_DIR!\" (
    color %YELLOW%
    :: 提取盘符检查
    for /f "delims=:" %%d in ("!LOCAL_ROOT_DIR!") do set "drive=%%d"
    set "drive=!drive:~0,1!"
    
    if not exist "!drive!:\" (
        :: 盘符不存在,使用桌面目录
        set "LOCAL_ROOT_DIR=!USERPROFILE!\Desktop\Samba"
        echo [信息] !drive!盘不存在,将挂载到桌面:
        echo !LOCAL_ROOT_DIR!
    )
    :: 检测桌面的Samba目录
    if not exist "!LOCAL_ROOT_DIR!\" (
        mkdir "!LOCAL_ROOT_DIR!" >nul || (
            color %RED%
            echo [错误] 根目录创建失败!
            echo 请检查路径是否合法或是否有写入权限
            pause
            exit /b 1
        )
    )
)
endlocal & set "LOCAL_ROOT_DIR=%LOCAL_ROOT_DIR%"

:: 6. 获取共享列表并选择(使用临时文件)
:: ----------------------------
:SELECT_SHARE
:: 循环添加共享目录时,重置变量
set LOCAL_DIR=
set LOCAL_NAME=
set SHARE_PATH=
set TEMP_CHECK_DIR=

color %BLUE%
echo [信息] 正在获取服务器共享列表...
echo ==============================================

:: 删除旧临时文件
if exist "%TEMP_FILE%" del "%TEMP_FILE%"

:: 获取共享列表并存储到临时文件
setlocal enabledelayedexpansion
set /a COUNT=0
for /f "tokens=1* delims= " %%A in ('net view \\%SERVER_IP% 2^>nul ^| findstr /r /c:"Disk"') do (
    for /f "delims=" %%S in ("%%A") do set SHARE_NAME=%%S
    set SHARE_DESC=%%B
    
    if not "!SHARE_NAME!"=="" (
        if not "!SHARE_NAME!"=="命令成功完成。" (
            set /a COUNT+=1
            >> "%TEMP_FILE%" echo !COUNT!.!SHARE_NAME!
            echo !COUNT!. !SHARE_NAME!
        )
    )
)
endlocal & set COUNT=%COUNT%

if %COUNT% equ 0 (
    color %RED%
    echo [错误] 未找到可用共享,或没有访问权限
    pause
    exit /b 1
)

echo ==============================================
:INPUT_NUM
set /p SHARE_NUM=请输入要挂载的共享编号(1-%COUNT%):
if "%SHARE_NUM%"=="" goto INPUT_NUM
if %SHARE_NUM% lss 1 goto INPUT_NUM
if %SHARE_NUM% gtr %COUNT% goto INPUT_NUM

:: 从临时文件获取共享名称
for /f "tokens=1,2 delims=." %%a in ('findstr /b "%SHARE_NUM%." "%TEMP_FILE%"') do (
    for /f "delims=" %%c in ("%%b") do set SHARE_PATH=%%c
)

if "%SHARE_PATH%"=="" (
    color %RED%
    echo [错误] 无法获取共享名称
    pause
    exit /b 1
)

:: 7. 输入本地目录名
:INPUT_NAME
color %BLUE%
set /p LOCAL_NAME=请输入本地目录名(默认:"%SHARE_PATH%"):
if "%LOCAL_NAME%"=="" set LOCAL_NAME=%SHARE_PATH%

:: 8. 检查目标目录
:: ----------------------------
set "TEMP_CHECK_DIR=%LOCAL_ROOT_DIR%\%LOCAL_NAME%"
if exist "%TEMP_CHECK_DIR%\" (
    color %RED%
    echo [错误] 目标目录已存在:%TEMP_CHECK_DIR%
    echo [提示] 请手动删除已存在目录或更改挂载点
    echo.
    echo 按下回车[ENTER]返回上一步... ...
    echo.
    pause >nul
    goto INPUT_NAME
)

:: 设置完整本地路径
set LOCAL_DIR=%TEMP_CHECK_DIR%

:: 9. 创建符号链接
:: ----------------------------
color %BLUE%
echo [信息] 正在挂载到本地目录...
mklink /D "%LOCAL_DIR%" "\\%SERVER_IP%\%SHARE_PATH%" >nul || (
    color %RED%
    echo [错误] 符号链接创建失败!
    echo 可能原因:
    echo 1. 没有创建符号链接的权限
    echo 2. 系统符号链接功能被禁用
    pause
    exit /b 1
)

:: 10. 完成提示并打开目录
:: ----------------------------
color %GREEN%
echo ==============================================
echo [成功] Samba共享已成功挂载!
echo.
echo 远程路径:\\%SERVER_IP%\%SHARE_PATH%
echo 本地路径:%LOCAL_DIR%
echo.
echo ==============================================

:: 询问是否打开根目录
set /p OPEN_DIR=是否打开挂载根目录?(Y打开/Enter继续):
if /i "%OPEN_DIR%"=="Y" (
    start "" "%LOCAL_ROOT_DIR%"
)

:: 清屏并返回主菜单
cls
goto :SELECT_SHARE

:: 删除临时文件
if exist "%TEMP_FILE%" del "%TEMP_FILE%"

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。