Board logo

标题: [文件操作] [已解决]拖放文件到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),内容如下:
  1. a
  2. b
  3. c
  4. d
复制代码
用来处理的批处理文件(拖曳到的对象)为test.bat(下面简称b)

测试一:
test.bat代码为:
  1. @echo off
  2. echo 123
  3. echo 123 >测试重定向.txt
  4. pause
复制代码
直接运行当然能生成 测试重定向.txt;把a拖到b,只显示第一个echo回显的“123”,而第二个重定向没有执行,没有生成 测试重定向.txt

测试二:
  1. @echo off
  2. echo 123
  3. echo 123 >%1.txt
  4. pause
复制代码
测试一改为这样能生成 测试文本.txt.txt

测试三:
  1. @echo off
  2. echo 123
  3. echo 123 >"%~nx1.txt"
  4. pause
复制代码
a托到b,又不能生成

测试四:
  1. @echo off
  2. for /f "usebackq delims=" %%i in ("%~1") do echo %%i>>测试重定向.txt
  3. pause
复制代码
a托到b,直接显示没问题;重定向就不行了,根本就不生成 测试重定向.txt 这个文件

测试五:
  1. @echo off
  2. for %%i in (%1) do cd.>%%i.txt
  3. pause
复制代码
a托到b能生成目标文件

测试六:
  1. @echo off
  2. for /f "usebackq delims=" %%i in ("%~1") do cd.>%%i.txt
  3. 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