将文件拖放到批处理文件中以将该文件名写入批处理文件的脚本中?

loo*_*now 6 windows command-line batch-file

假设我有一个名为batch.bat的批处理文件,其内容如下:

@echo off

C:\path\to\program\program.exe -variables "%1"
Run Code Online (Sandbox Code Playgroud)

假设我有一个名为 file.txt 的文件和另一个名为 file2.txt 的文件

假设我将 file.txt 放到了 batch.bat 上。

我想要发生的是:

  • file.txt 使用program.exe 打开
  • 并且batch.bat的内容被覆盖,现在显示如下内容:
    @echo off

    C:\path\to\program\program.exe -variables "file.txt"
Run Code Online (Sandbox Code Playgroud)
  • 现在,如果我双击batch.bat,它将使用program.exe打开file.txt
  • 双击时它将继续执行此操作,直到我将 file2.txt 拖放到 batch.bat 上。此时,batch.bat 的内容将再次被覆盖为:
     @echo off

     C:\path\to\program\program.exe -variables "file2.txt"
Run Code Online (Sandbox Code Playgroud)

这个概念可能吗?批处理文件的内容需要是什么?

如果这可以通过其他简单的方式来完成,我也愿意。但我需要能够运行带有参数的命令行命令,因为我正在运行命令行程序,而不是记事本或其他程序。

loo*_*now 0

在 @Se\xc3\xb1orCMasMas\ 的帮助下,我使用ifsetecho(到文件)和start命令提出了一个解决方案。

\n\n

如果您要打开的路径或文件中有空格,则启动命令需要标题参数。此外,如果是这种情况,它需要单独的路径参数和文件名参数。因此,我的批处理文件相当长,以允许这些可能性。

\n\n
if not "%~1"=="" set input-title=""\nif not "%~1"=="" set input-path="%~dp1"\nif not "%~1"=="" set input-file="%~nx1"\nif not "%~1"=="" echo %input-title% /d %input-path% %input-file%>input.txt\nset /p start-input=<input.txt\nstart %start-input%\n
Run Code Online (Sandbox Code Playgroud)\n\n

https://ss64.com/nt/syntax-args.html对于解释传递给批处理文件的参数的表示方式与其他变量不同 - 只有前导“%”,没有尾随“%”很有用。

\n\n

\'for\' 的 Windows 文档对于解释变量替换非常有用,它允许您将驱动器+路径+文件变量分解为其组成部分,并且允许您使用 " 从参数值中删除封闭的双引号~”。

\n

  • 不必重复`if not "%~1"` ...您可以构建代码块。 `如果不是 "%~1"=="" ( cmd1 &lt;换行&gt; cmd2 &lt;换行&gt; cmd3 ... )` (2认同)