[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]BAT如何截取第一个输入路径的最后目录名?

BAT中如何截取第一个输入路径的最后目录名加在第二个输入路径的后边使用
set /p src=c:\fee\mm
set /p dest=d:\jk
如何能让%dest%变量值变成d:\jk\mm
for %%a in ("%src:"=%") do set dest="%dest:"=%\%%~nxa"
PS:我知道文件的符號鏈接不用參數直接 Mklink 就行了可是我不知道怎麼讓BAT判斷輸入的是路徑還是文件IF怎麼用還請達人修正。。最好滑鼠拖拽的是文件就用Mklink 要是目錄就用Mklink /j
谢谢
以下是:
在WIN7中利用Mklink進行目錄點連接或文件符號鏈接的批處理支持目錄空格。。智能判斷源為文件或是目錄分別調用參數。。感謝CN-DOS的000000000000000大大!!

  1. @echo off
  2. set "m="
  3. set /p src=[請輸入Mklink源文件路徑支持滑鼠拖拽]
  4. set /p lnk=[請輸入Link目標文件路徑支持滑鼠拖拽]
  5. set /p m=[請輸入Link目標名默認同名源文件(目錄)]
  6. set src="%src:"=%"
  7. if defined m (
  8.     set _path="%lnk:"=%\%m:"=%"
  9.     if not exist %src%\ (
  10.         for %%a in (%src%) do (
  11.             for %%b in ("%m:"=%") do (
  12.                 if "%%~xb" neq "%%~xa" set _path="%lnk:"=%\%m:"=%%%~xa"
  13.             )
  14.         )
  15.     )
  16. ) else for %%a in (%src%) do set _path="%lnk:"=%\%%~nxa"
  17. if exist %src%\ (Mklink /j %_path% %src%) else Mklink %_path% %src%
  18. pause
复制代码


[ 本帖最后由 Nano 于 2010-1-12 22:19 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

请参照以下代码修改:
  1. @echo off
  2. set "str=c:\pad\c mk\aaaa"
  3. for /f "delims=" %%a in ("%str%") do echo %%~na
  4. pause>nul
复制代码
***共同提高***

TOP

原帖由 batman 于 2010-1-11 18:13 发表
请参照以下代码修改:@echo off
set "str=c:\pad\c mk\aaaa"
for /f "delims=" %%a in ("%str%") do echo %%~na
pause>nul

斑斑我看不懂。。我这个是从网上找的。。我只会引用%i%和%l%

能不能直接帮我写好。。

谢谢

TOP

%%~na是扩展到文件名不包含后缀(如果目标中包含.符号则会显示目标的最后一个.以前的内容)

比如你D盘上有个文件夹或者文件 a.b.c 拖放到下面的批处理上
  1. @echo off
  2. echo %1
  3. echo %~n1
  4. echo %~nx1
  5. pause
复制代码
显示
"D:\a.b.c"
a.b
a.b.c

TOP

本论坛不欢迎伸手党!!!
***共同提高***

TOP

原帖由 batman 于 2010-1-11 19:41 发表
本论坛不欢迎伸手党!!!

斑斑我不是伸手黨。。我是整合黨。。不是專業程序員。。只是想簡化下自己的工作。。
一般都是對解決的工作中的問題記憶深刻。。只有對工作有幫助才有進一步學習的動力呀。。如果我只是想簡化下日常工作還要學習個十天半月的才能用。。會不會像只是想看清畫的景物而先生卻讓先弄清畫的紙質及所用顏料等等後才能行呢。。這裡是咨詢區我才來的。。我不是專家。。只是個剛開始感興趣的人。。是不是非專業人士不能入內呢。。拒人千里。。不利後進。。有損先賢罷。。

TOP

呵呵
  1. @echo off
  2. set i=c:\fee\mm
  3. set L=d:\jk
  4. for /f "delims=" %%a in ("%i%") do set L=%L%\%%~na
  5. echo %L%
  6. pause
复制代码
技术问题请到论坛发帖求助!

TOP

原帖由 随风 于 2010-1-11 23:07 发表
呵呵@echo off
set i=c:\fee\mm
set L=d:\jk
for /f "delims=" %%a in ("%i%") do set L=%L%\%%~na
echo %L%
pause

先謝謝斑斑的代碼可是我試了下如果目錄有空格就不行了。。望修正。。再謝。。

TOP

不行?怎么不行?显示不了么?
技术问题请到论坛发帖求助!

TOP

原帖由 随风 于 2010-1-12 00:17 发表
不行?怎么不行?显示不了么?
不是顯示不了是引用不了。。新問題在頂樓。。謝謝大大

TOP

mklink 命令没用过,估计不能处理含空格的文件名,应该是没加引号的缘故
你试试 Mklink /J "%l%" "%i%"
另你的题意没看懂
最好滑鼠拖拽的是文件就用Mklink %l% %i%要是目錄就用Mklink /j %l% %i%
你这里有两个输入选项,你输入时两个都是一样的吗?要判断哪一个?
最好能用文字描述你的问题,因为代码有时会把人引入歧途。
技术问题请到论坛发帖求助!

TOP

Mklink命令是支持帶空格目錄或文件的。。
我的意思是:
第一種:[請輸入Mklink源文件路徑支持滑鼠拖拽]"D:\Users\i - Copy\P h o  t o s"

[請輸入Link目標文件路徑支持滑鼠拖拽]"D:\Users\i - Copy\New folder"
在這要判斷源是文件還是目錄
"D:\Users\i - Copy\New folder\P h o t o s"
Press any key to continue . . .
源是目錄
接下來執行 Mklink 帶/j參數命令
第二種:
[請輸入Mklink源文件路徑支持滑鼠拖拽]"D:\Users\i - Copy\desktop.ini"

[請輸入Link目標文件路徑支持滑鼠拖拽]"D:\Users\i - Copy\New folder"
在這要判斷源是文件還是目錄
"D:\Users\i - Copy\New folder\desktop這裡掉了.ini如何補上"
Press any key to continue . . .
源是文件
接下來就執行Mklink不帶任何參數的 命令

TOP

@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSIONFOR %%I IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (    IF EXIST %%I:\* (       CD /D %%I:       FOR /F "DELIMS=" %%A IN ('DIR /S/B 2009_*.txt 2^>nul') DO (           SET FOO=%%~NA           SET FOO=!FOO:*_=!           ECHO/!FOO!  %%A           )        )    ))PAUSE>NUL
有大大解釋下麼網上找來的看不懂。。


[ 本帖最后由 Nano 于 2010-1-12 01:38 编辑 ]

TOP

回复 6楼 的帖子

我说两句:

1、和你一样,论坛的管理团队成员没有一个是程序员,很多学的都还不是计算机专业,都是因为热爱批处理,通过

努力自学而来,如果我们每次都是直接要别人给出代码,相信你也看不到现在的管理团队了。

2、批处理之家是批处理人的大家庭,请相信我们从没有也从不会拒人于千里之外,在此有很多和你一样起步的批处

理新人,他们正在这里学习和成长。

3、我们不能否认伸手党客观存在的这一事实,本人亲身遇到过太多这样的人,一开始都显得极其热情,一旦得到了

想要的代码和解决方案,就立马消失得无影无踪,这根本就不是学习之人!

4、本人之所以要你参照我的代码修改,就是想你自己来亲手解决问题,这样你才学得深记得牢,你如果在修改中有

不明白的地方,论坛的每个人都会为你热心解答,但问题是你自己总先要动下手吧。

5、本人再次严肃声明:本论坛不欢迎伸手党!!!

[ 本帖最后由 batman 于 2010-1-12 09:54 编辑 ]
***共同提高***

TOP

你的问题真的很好解决,唉:
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p i=[請輸入Mklink源文件路徑支持滑鼠拖拽]
  3. ECHO.
  4. set /p l=[請輸入Link目標文件路徑支持滑鼠拖拽]
  5. for /f "delims=" %%a in ("%i%") do (
  6.      if "%%~xa" equ "" set "j=/j "
  7.      Mklink !j!"%l%\%%~nxa"
  8. )
复制代码

[ 本帖最后由 batman 于 2010-1-12 15:48 编辑 ]
***共同提高***

TOP

返回列表