标题: [文件操作] 怎样实现拖动文件到批处理窗口执行? [打印本页]
作者: shuaige100 时间: 2011-6-2 15:50 标题: 怎样实现拖动文件到批处理窗口执行?
给个示例的命令行就行了,网络不好找这样的,不好意思麻烦dx你们了【我想一次拖动的文件不止一个】
作者: applba 时间: 2011-6-2 16:04
请具体点。
作者: CrLf 时间: 2011-6-2 16:07
- @echo off
- set /p input=此时拖入文件
- echo "%input%"
- pause
复制代码
不过用拖入的方式有那么一点缺陷:当文件名中含有&时,若不对其转义,可能会产生意料之外的效果,可以用双引号或者变量延迟避免
作者: shuaige100 时间: 2011-6-2 17:01
3# zm900612
不好意思,我开始没说清楚,现在我已更新到顶楼了
作者: CrLf 时间: 2011-6-2 17:23
如果不存在含&号的文件名,这样最快:- @echo off
- for %%a in (%*) do echo %%a
- pause
复制代码
如果要同时操作多个文件,可能要用shift:- @echo off
- :again
- echo "%~1"
- shift
- if "%~1" neq "" goto again
- pause
复制代码
如果要兼容特殊字符,可以这样:- @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:35
本帖最后由 zm900612 于 2011-6-3 12:35 编辑
5楼是获取直接拖到图标上的文件名,若要改成从窗口获取,可以:- @echo off
- set /p input=此时拖入
- setlocal enabledelayedexpansion
- for %%a in (!input!) do echo %%a
- pause
复制代码
若要拖入多条不同目录下的文件,也可以这样(每次拖入只算第一条,结束时先回车再按ctrl+Z再回车):- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('findstr .* ^<con') do set input=!input!%%a
- set input=!input:"=!
- for %%a 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 set input=!input:%%a:\=" "%%a:\!
- for %%a in ("!input!") do echo %%a
- 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 编辑
以前写了一个拖入式批量重命名。
在上面切了部分代码,看起来有些累赘,现在的作用是显示拖入的文件名,仅供参考- @echo off
- if "%~1"=="" (
- echo 您没有拖入文件到我身上,于是第一个参数为空,按任意键拜拜~
- pause>nul
- exit
- )
-
- :main
- if not "%~1"=="" (
- if exist "%~1" (
- echo %~1
- ) else (
- echo "%~1" not exist
- )
- shift /1
- goto :main
- )
-
- pause
- 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 编辑
这个问题有人发在挑战区里,我做了苦苦的探索,无私奉献最后结果如下:- @echo off
- for /f "tokens=*" %%a in ("%*") do (
- for %%i in (%%a) do if exist %%i echo %%i
- )
- 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
冗余代码多了点,直接这样就行了:- @echo off
- set "tmp=%*"
- setlocal EnableDelayedExpansion
- for %%a in (!tmp!) do echo %%a
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |