【问题标题】:DOS batch : Different behaviour between command line and drag and dropDOS批处理:命令行和拖放之间的不同行为
【发布时间】:2015-06-21 11:19:35
【问题描述】:

我正在尝试在文件中写入命令行的第一个参数,但它在命令行中有效,而不是通过拖放操作。

非常简单的批处理文件(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"

有什么解释吗?

【问题讨论】:

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


    【解决方案1】:

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

    替换您的 test_echo.cmd
    @echo off
        for %%a in (.) do echo %%~fa
        pause
    

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

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

    您可以找到更多信息here

    为了快速解决,

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

    这将在保存批处理文件的同一文件夹中创建文件

    【讨论】:

      【解决方案2】:

      什么 Windows 版本。出于安全原因,Vista 不能拖放到命令提示符中。有限的可能性在以后的版本中(因为我们都抱怨过)。

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

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

      【讨论】:

        猜你喜欢
        • 2012-01-27
        • 1970-01-01
        • 2015-04-26
        • 2019-01-22
        • 1970-01-01
        • 1970-01-01
        • 2016-09-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多