标题: [文件操作] [已解决]拖放文件到bat上执行没有在当前目录输出生成文本文件是什么原因 [打印本页]
作者: zhouyongjun 时间: 2009-7-13 11:53 标题: [已解决]拖放文件到bat上执行没有在当前目录输出生成文本文件是什么原因
本帖最后由 pcl_test 于 2018-4-20 16:59 编辑
拖曳打开传递参数之重定向到文本
引出话题:
昨天写此贴http://bbs.bathome.net/thread-5182-1-1.html四楼代码时,最初没有采用交互,采用直接拖曳处理的方式。但是让我惊讶的发现,结果不能重定向到文本,后面修改代码采用set/p接受变量才成功。
相关帖子还有:
《怎样使文件拖拽到批处理上就其执行命令?》
http://bbs.bathome.net/thread-5202-1-1.html
于是我就做了下面测试:
描述:
拖动的文本文件,测试文本.txt(下面简称a),内容如下:复制代码
用来处理的批处理文件(拖曳到的对象)为test.bat(下面简称b)
测试一:
test.bat代码为:- @echo off
- echo 123
- echo 123 >测试重定向.txt
- pause
复制代码
直接运行当然能生成 测试重定向.txt;把a拖到b,只显示第一个echo回显的“123”,而第二个重定向没有执行,没有生成 测试重定向.txt
测试二:- @echo off
- echo 123
- echo 123 >%1.txt
- pause
复制代码
测试一改为这样能生成 测试文本.txt.txt
测试三:- @echo off
- echo 123
- echo 123 >"%~nx1.txt"
- pause
复制代码
a托到b,又不能生成
测试四:- @echo off
- for /f "usebackq delims=" %%i in ("%~1") do echo %%i>>测试重定向.txt
- pause
复制代码
a托到b,直接显示没问题;重定向就不行了,根本就不生成 测试重定向.txt 这个文件
测试五:- @echo off
- for %%i in (%1) do cd.>%%i.txt
- pause
复制代码
a托到b能生成目标文件
测试六:- @echo off
- for /f "usebackq delims=" %%i in ("%~1") do cd.>%%i.txt
- pause
复制代码
a托到b不能生成目标文件
感谢各位的回帖,问题原因已水落石出:
双击打开批处理,默认目录为当前目录
把文件拖到批处理上,启动目录是“%USERPROFILE%”
处理方法见5楼
[ 本帖最后由 zhouyongjun 于 2009-7-13 12:28 编辑 ]
作者: tireless 时间: 2009-7-13 12:12
是启动目录问题。
直接双击批处理,启动目录是批处理所在文件夹;
把文件拖到批处理上,我这里的启动目录是“%USERPROFILE%”;
你在批处理结尾加上 start . 就可以看到生成的文件了。
[ 本帖最后由 tireless 于 2009-7-13 12:18 编辑 ]
作者: zhouyongjun 时间: 2009-7-13 12:13
哈哈,我已经找到原因了
那些“没有生成”的文件全部在C:\Documents and Settings\Administrator 下
纳闷了,为什么不在当前目录下?
用set/p 为什么就可以呢?
作者: zhouyongjun 时间: 2009-7-13 12:15
呵呵,二楼比我快,刚才在发帖没看到你的回帖
作者: wxcute 时间: 2009-7-13 12:15
能生成,只是生成到了 "%userprofile%" 目录下(即执行BAT的目录下)
只要在 @echo off 下面加一句 cd/d %~dp0 就能生成到 P 所在目录了;
或加 cd/d %~dp1 生成到 拖曳文件所在目录(PUSHD 命令也行)。
作者: zhouyongjun 时间: 2009-7-13 12:19
谢谢各位的回帖,以前不知道拖曳的启动目录是“%USERPROFILE%“
又学到一个知识点
感谢!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |