Board logo

标题: [文件操作] 怎样实现拖动文件到批处理窗口执行? [打印本页]

作者: shuaige100    时间: 2011-6-2 15:50     标题: 怎样实现拖动文件到批处理窗口执行?

给个示例的命令行就行了,网络不好找这样的,不好意思麻烦dx你们了【我想一次拖动的文件不止一个】
作者: applba    时间: 2011-6-2 16:04

请具体点。
作者: CrLf    时间: 2011-6-2 16:07

  1. @echo off
  2. set /p input=此时拖入文件
  3. echo "%input%"
  4. pause
复制代码
不过用拖入的方式有那么一点缺陷:当文件名中含有&时,若不对其转义,可能会产生意料之外的效果,可以用双引号或者变量延迟避免
作者: shuaige100    时间: 2011-6-2 17:01

3# zm900612
不好意思,我开始没说清楚,现在我已更新到顶楼了
作者: CrLf    时间: 2011-6-2 17:23

如果不存在含&号的文件名,这样最快:
  1. @echo off
  2. for %%a in (%*) do echo %%a
  3. pause
复制代码
如果要同时操作多个文件,可能要用shift:
  1. @echo off
  2. :again
  3. echo "%~1"
  4. shift
  5. if "%~1" neq "" goto again
  6. pause
复制代码
如果要兼容特殊字符,可以这样:
  1. @echo off
  2. set "tmp=%*"
  3. setlocal enabledelayedexpansion
  4. set cmd=?!cmdcmdline:*.bat^=!
  5. set cmd=!cmd:?" =?!
  6. for %%a in (!cmd:~1!) do echo %%a
  7. pause
复制代码

作者: CrLf    时间: 2011-6-2 17:35

本帖最后由 zm900612 于 2011-6-3 12:35 编辑

5楼是获取直接拖到图标上的文件名,若要改成从窗口获取,可以:
  1. @echo off
  2. set /p input=此时拖入
  3. setlocal enabledelayedexpansion
  4. for %%a in (!input!) do echo %%a
  5. pause
复制代码
若要拖入多条不同目录下的文件,也可以这样(每次拖入只算第一条,结束时先回车再按ctrl+Z再回车):
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('findstr .* ^<con') do set input=!input!%%a
  3. set input=!input:"=!
  4. for %%a in (
  5.    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
  6. ) do set input=!input:%%a:\=" "%%a:\!
  7. for %%a in ("!input!") do echo %%a
  8. pause
复制代码
刚试了下,发现type con上限510字节,改用findstr .*<con似乎没有上限,所以又改了点
作者: shuaige100    时间: 2011-6-3 11:50

6# zm900612
版主最后那个不行啊
作者: 523066680    时间: 2011-6-3 11:58

本帖最后由 523066680 于 2011-6-3 11:59 编辑

以前写了一个拖入式批量重命名。
在上面切了部分代码,看起来有些累赘,现在的作用是显示拖入的文件名,仅供参考
  1. @echo off
  2. if "%~1"=="" (
  3.   echo 您没有拖入文件到我身上,于是第一个参数为空,按任意键拜拜~
  4.   pause>nul
  5.   exit
  6. )
  7. :main
  8. if not "%~1"=="" (
  9.    if exist "%~1" (
  10.       echo %~1
  11.    ) else (
  12.       echo "%~1" not exist
  13.    )
  14.    shift /1
  15.    goto :main
  16. )
  17. pause
  18. exit
复制代码

作者: shuaige100    时间: 2011-6-3 12:20

8# 523066680
你刚回答的批处理还是不行的
作者: CrLf    时间: 2011-6-3 12:27

7# shuaige100


忘了说,结束时先回车再按ctrl+Z再回车
作者: 523066680    时间: 2011-6-3 12:43

直接拖放到窗口多个文件参数没试成功过
拖放到批处理文件上,可以有多个参数
作者: cjiabing    时间: 2011-6-3 12:45

本帖最后由 cjiabing 于 2011-6-3 12:47 编辑

这个问题有人发在挑战区里,我做了苦苦的探索,无私奉献最后结果如下:
  1. @echo off
  2. for /f "tokens=*" %%a in ("%*") do (
  3.     for  %%i in (%%a) do if exist %%i echo %%i   
  4. )
  5. pause
复制代码

用某人说的,&之类的本身就是系统规则,没必要太过纠结,假如要处理请另外处理!~
作者: ckz1211    时间: 2014-2-13 20:37

如果要兼容特殊字符,可以这样:
@echo off
set "tmp=%*"
setlocal enabledelayedexpansion
set cmd=?!cmdcmdline:*.bat^=!
set cmd=!cmd:?" =?!
for %%a in (!cmd:~1!) do echo %%a
pause
CrLf 发表于 2011-6-2 17:23


冗余代码多了点,直接这样就行了:
  1. @echo off
  2. set "tmp=%*"
  3. setlocal EnableDelayedExpansion
  4. for %%a in (!tmp!) do echo %%a
  5. pause
复制代码





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