[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]拖放文件到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 编辑 ]
1

评分人数

    • keen: 感谢主动给标题标注[已解决]字样PB + 2

谢谢各位的回帖,以前不知道拖曳的启动目录是“%USERPROFILE%“
又学到一个知识点
感谢!

TOP

能生成,只是生成到了 "%userprofile%" 目录下(即执行BAT的目录下)

只要在 @echo off 下面加一句 cd/d %~dp0 就能生成到 P 所在目录了;
或加 cd/d %~dp1 生成到 拖曳文件所在目录(PUSHD 命令也行)。
批处理之家论坛官方 QQ 群 :【当前人数/人数上限】【2009-07-08】
群①:43011867(181/200);群②:(暂缺数据);群③:66165582(120/200)。

TOP

呵呵,二楼比我快,刚才在发帖没看到你的回帖

TOP

哈哈,我已经找到原因了
那些“没有生成”的文件全部在C:\Documents and Settings\Administrator 下
纳闷了,为什么不在当前目录下?
用set/p 为什么就可以呢?

TOP

是启动目录问题。

直接双击批处理,启动目录是批处理所在文件夹;
把文件拖到批处理上,我这里的启动目录是“%USERPROFILE%”;

你在批处理结尾加上 start . 就可以看到生成的文件了。

[ 本帖最后由 tireless 于 2009-7-13 12:18 编辑 ]

TOP

返回列表