Board logo

标题: [文件操作] 拖拽/拖放文件夹到bat上执行如何获取路径和文件夹名称 [打印本页]

作者: wnsdt    时间: 2016-5-27 11:23     标题: 拖拽/拖放文件夹到bat上执行如何获取路径和文件夹名称

本帖最后由 pcl_test 于 2018-4-20 17:11 编辑

本人想通过拖拽文件夹到批处理的方式获取文件夹的路径、文件夹名称。目前通过set变量,可实现拖拽获取路径,但文件夹名称如何也能拖拽获取?

对于文件夹名称,我能想到的思路是先拖拽获取路径,然后通过for /f,以路径中的“\”作为分隔符,但是却不知道如何获取路径的最后一列(文件夹名称),因为路径的列数是随机的,不能简单的tokens!

请大家帮助


版主请见谅,我发的帖子都是在论坛里找了好久找不到答案,所以才发帖,但是今天无意中找百度,有个博客跳转给了我答案,看来for的扩展变量真的太强大了,以后要好好学学


下面是命令,分享给大家:

@echo off
set /p name=
for %%a in (%name%) do echo %%~nxa
pause


以上代码在右键批处理-管理员权限运行,不支持拖拽

http://www.bathome.net/thread-29387-1-1.html,我之前也专门提问但未得到解决,不知道大家有没有好办法
作者: gawk    时间: 2016-5-27 13:00

  1. @echo off
  2. for %%a in (%1) do echo %%~nxa
  3. pause
复制代码
这样也能实现拖拽获取吧

但是这种拖拽的代码一定要特别小心,因为文件名里面的特殊字符可能导致代码出问题。例如文件名叫做:
a&b.txt
作者: wnsdt    时间: 2016-5-27 17:36

回复 2# gawk


    你这个代码只能获得文件名且没有交互,批处理不能运行,只能拖拽文件夹到批处理本身,不过还是谢谢热心回答
作者: gawk    时间: 2016-5-27 19:27

回复 3# wnsdt


    这。。。。。。你不是要解决拖拽的问题吗?没看到你说要求交互啊
作者: gawk    时间: 2016-5-27 19:28

你想实现的功能是不是这样:
拖拽的时候,可以获取。
如果没有拖拽,就提示用户输入。

是这个意思吗?
作者: bbaa    时间: 2016-5-29 15:52

@echo off
setlocal enabledelayedexpansion
set /p name=
for %%i in ("%name") do set name=%%~i
cd /d "%name%"
cd..
set "dir=!name:%cd%\=!"
set "dir=!dir:%cd%=!"
cd /d "%~dp0"
echo %dir%
pause

这鬼方法只有我才能想出来233
作者: wnsdt    时间: 2016-5-30 09:20

回复 6# bbaa


    感谢热心回答,但是不支持批处理右键管理员权限下运行,此时拖拽是无法获取位置的
作者: bbaa    时间: 2016-5-30 18:13

回复 7# wnsdt


    我倒是可以诶
作者: 小程936    时间: 2016-6-3 11:16

参考一下
  1. @echo off
  2. color 9F
  3. mode con cols=50 lines=15
  4. title VHD VHDX 加载工具
  5. echo 您可以拖动VHD到本程序快捷方式上使用。
  6. echo 您也可以拖动VHD到本窗口后按回车使用。
  7. echo 还可以在下方输入VHD路径后按回车使用。
  8. if "%*%" == "" goto 2
  9. set vhd=%*%
  10. :1
  11. echo select vdisk file=^"%vhd%^">"%temp%\vhd.ini"
  12. echo attach vdisk>>"%temp%\vhd.ini"
  13. start diskpart.exe -s "%temp%\vhd.ini"
  14. exit
  15. :2
  16. set /p "vhd=>:"
  17. goto 1
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2