找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 41948|回复: 12

[文件操作] 怎样实现拖动文件到批处理窗口执行?

[复制链接]
发表于 2011-6-2 15:50:46 | 显示全部楼层 |阅读模式
给个示例的命令行就行了,网络不好找这样的,不好意思麻烦dx你们了【我想一次拖动的文件不止一个】
发表于 2011-6-2 16:04:08 | 显示全部楼层
请具体点。
发表于 2011-6-2 16:07:22 | 显示全部楼层
  1. @echo off
  2. set /p input=此时拖入文件
  3. echo "%input%"
  4. pause
复制代码
不过用拖入的方式有那么一点缺陷:当文件名中含有&时,若不对其转义,可能会产生意料之外的效果,可以用双引号或者变量延迟避免
 楼主| 发表于 2011-6-2 17:01:49 | 显示全部楼层
3# zm900612
不好意思,我开始没说清楚,现在我已更新到顶楼了
发表于 2011-6-2 17:23:33 | 显示全部楼层
如果不存在含&号的文件名,这样最快:
  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
复制代码
发表于 2011-6-2 17:35:26 | 显示全部楼层
本帖最后由 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似乎没有上限,所以又改了点
 楼主| 发表于 2011-6-3 11:50:12 | 显示全部楼层
6# zm900612
版主最后那个不行啊
发表于 2011-6-3 11:58:17 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2011-6-3 12:20:11 | 显示全部楼层
8# 523066680
你刚回答的批处理还是不行的
发表于 2011-6-3 12:27:01 | 显示全部楼层
7# shuaige100


忘了说,结束时先回车再按ctrl+Z再回车
发表于 2011-6-3 12:43:33 | 显示全部楼层
直接拖放到窗口多个文件参数没试成功过
拖放到批处理文件上,可以有多个参数
发表于 2011-6-3 12:45:06 | 显示全部楼层
本帖最后由 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
复制代码

用某人说的,&之类的本身就是系统规则,没必要太过纠结,假如要处理请另外处理!~
发表于 2014-2-13 20:37:28 | 显示全部楼层
如果要兼容特殊字符,可以这样:
@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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 01:43 , Processed in 0.035223 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表