DOS批处理:命令行和拖放之间的不同行为

时间:2015-06-21 11:19:35

标签: windows batch-file cmd arguments file-writing

我正在尝试在文件中编写命令行的第一个参数,但它在命令行中工作,而不是拖放。

非常简单的批处理文件(test_echo.cmd)如下:

@echo OFF
echo %1 > echo_arg_in_file.txt`

在命令行中,

C:\rep>test_echo.cmd "C:\rep\fichier de test.txt"`

创建一个文件echo_arg_in_file.txt,其中写有"C:\rep\fichier de test.txt"

但是通过在批处理文件上拖放文件"C:\rep\fichier de test.txt",没有任何反应......(删除> echo_arg_in_file.txt的测试之前已经完成并且显示良好"C:\rep\fichier de test.txt")< / p>

有任何解释吗?

2 个答案:

答案 0 :(得分:2)

我不确定您的确切环境,但如果我必须打赌,当前的活动目录就是问题

将您的test_echo.cmd替换为

@echo off
    for %%a in (.) do echo %%~fa
    pause

然后通过双击并拖放文件来执行文件。在这两种情况下,您都会看到已启动的cmd进程的当前活动目录

为什么这有关系?由于您没有在原始文件重定向中包含路径,因此将在当前活动目录中创建此文件,该文件可能不是您所期望的。

您可以找到更多信息here

快速解决方案,

@echo OFF
> "%~dp0\echo_arg_in_file.txt" echo %1

将在包含批处理文件的同一文件夹中创建文件

答案 1 :(得分:0)

Windows版本。出于安全原因,Vista无法拖放到命令提示符中。受限制的可能性在以后的版本中(因为我们都发牢骚)。

在Vista之前,如果拖入窗口,则与键入文件名相同。

如果谈论快捷方式,每个文件都是一个参数(使用shift命令来处理这个)。