概述说明

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
或者,搜索凭据管理器:
然后删除对应服务器的凭证即可:
挂载到目录
Windows默认挂载Samba是挂载到磁盘(映射网络驱动器),但是这种情况下,如果Samba服务端有很多共享目录,会造成本地占用多盘符,那么目前没有很官方的方法将Samba挂载到本地目录.但是有间接的方法.
这个方法的原理就是,首先保存指定服务器的凭据(账号密码)到Windows凭据,然后使用mklink的方式创建远程服务端的软链到Windows本地的指定文件夹.这样就完成了间接的挂载到本地文件夹.而且,因为保存了凭据,每次重启电脑以后挂载也不会失效,因为当我们需要访问本地的软链的时候,就会自动使用 Windows凭据里保存的账号密码进行验证授权.
在Windows终端中执行(注意修改为实际的账号密码)命令,添加凭据:
cmdkey /add:192.168.31.10 /user:user /pass:Nnn123
从下图可以看到,凭据添加成功
本地目录不能提前创建,不然会失败
比如下面的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
然后就挂载成功了:
挂载脚本
下面是一键挂载脚本(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
下面的脚本可以实现全自动挂载,输入数字即可:
脚本内容(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%"
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)