中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-13 03:56
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已完美解決]利用Mklink進行目錄點連接或文件符號鏈接 查看 3,285 回复 38
楼 主 [已完美解決]利用Mklink進行目錄點連接或文件符號鏈接 发表于 2010-01-11 18:04 ·  中国 湖北 联通
初级用户
积分 22
发帖 26
注册 2009-12-08 14:36
16年会员
UID 156140
性别 男
状态 离线
BAT中如何截取第一个输入路径的最后目录名加在第二个输入路径的后边使用
set /p i=c:\fee\mm
set /p l=d:\jk
如何能让%l%变量值变成d:\jk\mm


測試完美謝謝000000000000000的熱心幫助。。辛苦大大啦 。。


在WIN7中利用Mklink進行目錄點連接或文件符號鏈接的批處理支持帶空格目錄
以下代碼出自000000000000000
@echo off
set "m="
set /p src=
set /p lnk=
set /p m=
set src="%src:"=%"
if defined m (
set _path="%lnk:"=%\%m:"=%"
if not exist %src%\ (
for %%a in (%src%) do (
for %%b in ("%m:"=%") do (
if "%%~xb" neq "%%~xa" set _path="%lnk:"=%\%m:"=%%%~xa"
)
)
)
) else for %%a in (%src%) do set _path="%lnk:"=%\%%~nxa"
if exist %src%\ (Mklink /j %_path% %src%) else Mklink %_path% %src%
pause


[ Last edited by iPoint on 2010-1-14 at 15:23 ]
2 发表于 2010-01-11 19:23 ·  中国 重庆 移动
初级用户
积分 46
发帖 39
注册 2008-11-02 22:24
17年会员
UID 129819
性别 男
状态 离线
for %%i in (%i:\= %) do (set l=%l%\%%i)
3 发表于 2010-01-11 20:09 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
Originally posted by clamber at 2010-1-11 19:23:
for %%i in (%i:\= %) do (set l=%l%\%%i)


如果最后一个目录名中间有空格呢,如c:\a\b\c\d e
批处理之家新域名:www.bathome.net
4 发表于 2010-01-11 22:44 ·  中国 湖北 孝感 联通
初级用户
积分 22
发帖 26
注册 2009-12-08 14:36
16年会员
UID 156140
性别 男
状态 离线
Originally posted by bat-zw at 2010-1-11 20:09:


如果最后一个目录名中间有空格呢,如c:\a\b\c\d e


對呀有空格的目錄名怎麼弄
5 发表于 2010-01-11 23:39 ·  中国 陕西 西安 电信
初级用户
★★
积分 128
发帖 122
注册 2009-09-21 06:24
16年会员
UID 152378
性别 男
状态 离线

@echo off
set i=c:\aa\bb\c d
set l=d:\ff
set i=%i: =_%
for %%i in (%i:\= %) do (set l=%l%\%%i)
set l=%l:_= %
echo %l%
pause


这样就行了
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
BowAngel +1 2010-01-12 01:15
6 发表于 2010-01-12 01:16 ·  中国 陕西 西安 电信
新手上路
积分 4
发帖 4
注册 2009-12-23 00:34
16年会员
UID 157152
性别 男
状态 离线
确实可以啊
7 发表于 2010-01-12 09:34 ·  中国 湖北 孝感 联通
初级用户
积分 22
发帖 26
注册 2009-12-08 14:36
16年会员
UID 156140
性别 男
状态 离线
Originally posted by jarry0932 at 2010-1-11 23:39:

@echo off
set i=c:\aa\bb\c d
set l=d:\ff
set i=%i: =_%
for %%i in (%i:\= %) do (set l=%l%\%%i)
set l=%l:_= %
echo %l%
pause


这样就行了



"D:\Users\i - Copy\P h o t o s"

"D:\Users\i - Copy\New folder"
"D:\Users\i - Copy\New folder"\"D: Users i - Copy P h o t o s<P這裡多了D: Users i - Copy >"
Press any key to continue . . .
不行或
8 发表于 2010-01-12 13:02 ·  中国 上海 杨浦区 电信
初级用户
积分 49
发帖 42
注册 2009-11-26 04:39
16年会员
UID 155365
性别 男
状态 离线
@echo off
set /p src=
set /p dest=
for %%a in ("%src:"=%") do set FolderPath="%dest:"=%\%%~nxa"
echo %FolderPath%
pause
9 发表于 2010-01-12 13:24 ·  中国 湖北 孝感 联通
初级用户
积分 22
发帖 26
注册 2009-12-08 14:36
16年会员
UID 156140
性别 男
状态 离线
Originally posted by 000000000000000 at 2010-1-12 13:02:
@echo off
set /p src=
set /p dest=
for %%a in ("%src:"=%") do set Folder ...

感謝樓上。。如果接下來我要判斷源是文件就調用Mklink
如果是目錄就調用Mklink /j 怎麼寫。。

謝謝
10 发表于 2010-01-12 13:50 ·  中国 上海 杨浦区 电信
初级用户
积分 49
发帖 42
注册 2009-11-26 04:39
16年会员
UID 155365
性别 男
状态 离线
@echo off
set /p src=
set /p dest=
for %%a in ("%src:"=%") do set FolderPath="%dest:"=%\%%~nxa"
if exist "%src%"\ (echo Mklink /j) else echo Mklink
pause
11 发表于 2010-01-12 14:22 ·  中国 湖北 孝感 联通
初级用户
积分 22
发帖 26
注册 2009-12-08 14:36
16年会员
UID 156140
性别 男
状态 离线
Originally posted by 000000000000000 at 2010-1-12 13:50:
@echo off
set /p src=
set /p dest=
for %%a in ("%src:"=%") do set Folder ...

大大這段代碼運行後什麼都沒有
我的意思是源是文件就調用Mklink命令鏈接%FolderPath% %SRC%
源是目錄就調用Mklink /j 命令鏈接%FolderPath% %SRC%
12 re 11楼: 发表于 2010-01-12 14:27 ·  中国 上海 杨浦区 电信
初级用户
积分 49
发帖 42
注册 2009-11-26 04:39
16年会员
UID 155365
性别 男
状态 离线
if exist %src%\ (echo Mklink /j) else echo Mklink

上句就是判断是文件,还是目录的,改成你的具体命令就行了。即:

if exist %src%\ (Mklink /j "%FolderPath%" "%SRC%") else Mklink "%FolderPath%" "%SRC%"


[ Last edited by 000000000000000 on 2010-1-12 at 14:30 ]
13 发表于 2010-01-12 14:38 ·  中国 湖北 孝感 联通
初级用户
积分 22
发帖 26
注册 2009-12-08 14:36
16年会员
UID 156140
性别 男
状态 离线
@echo off
set /p src=
set /p dest=
for %%a in ("%src:"=%") do set FolderPath="%dest:"=%\%%~nxa"
if exist %src%\ (Mklink /j %FolderPath% %SRC%) else Mklink %FolderPath% %SRC%
pause

去掉變量前後的“”後在WIN7下運行正常。。謝謝大大

[ Last edited by iPoint on 2010-1-12 at 15:09 ]
14 发表于 2010-01-12 14:58 ·  中国 上海 杨浦区 电信
初级用户
积分 49
发帖 42
注册 2009-11-26 04:39
16年会员
UID 155365
性别 男
状态 离线
Originally posted by iPoint at 2010-1-12 14:38:
@echo off
set /p src=
set /p dest=
for %%a in ("%src:"=%") do set FolderPath=& ...

如果输入带空格的源路径而不加引号,貌似会出错。

建议改成:
@echo off
set /p src=
set /p dest=
set src="%src:"=%"
for %%a in (%src%) do set FolderPath="%dest:"=%\%%~nxa"
if exist %src%\ (echo Mklink /j %FolderPath% %SRC%) else echo Mklink %FolderPath% %SRC%
pause


[ Last edited by 000000000000000 on 2010-1-12 at 16:42 ]
15 发表于 2010-01-12 15:07 ·  中国 湖北 孝感 联通
初级用户
积分 22
发帖 26
注册 2009-12-08 14:36
16年会员
UID 156140
性别 男
状态 离线
Originally posted by 000000000000000 at 2010-1-12 14:58:

如果输入带空格的源路径而不加引号,貌似会出错。

建议改成:
@echo off
set /p src=
set /p dest=
我還想問下如果有時候我不想以源文件名命名符號鏈接就是%%~nxa能手工輸入嗎
就是在set /p dest=我拖入個D:\FEE然後手工輸入FF
%FolderPath%能=D:\FEE\FF嗎
论坛跳转: