【问题标题】:Batch file for loop directory search result changes when clicking on the batch file versus dragging a folder onto the batch file单击批处理文件与将文件夹拖到批处理文件上时,循环目录搜索结果的批处理文件会发生变化
【发布时间】:2020-02-27 12:59:51
【问题描述】:

问题说明:将文件夹拖到批处理文件上会更改 for 循环的结果,而只需单击批处理文件会导致来自上述 for 循环的不同但所需的输出。

背景: 我想在文件夹中检索最新创建的 .jar 文件的名称。 .bat 文件将位于 .jar 所在的文件夹中。使用下面提供的示例 .bat 文件代码,我双击 .bat 文件并获得我正在寻找的结果,例如: {jar_root_dir_path}+"logger-20191030.jar",请参阅下面的 "Desired output:" 部分进行说明。

问题是这个 .bat 文件只会在有人将文件夹拖到它上面然后将此信息传递给 .jar 文件的情况下使用。这就是我的问题所在。当我将文件夹拖到批处理文件上时,我没有得到最新的 .jar 文件的任何文件结果。请参阅下面的“当前输出:” 部分以查看问题的输出。

代码:

#Example code 

@echo off
for /f "delims=" %%x in ('dir /od /b logger*.jar') do set latestjar=%%x
echo "%~dp0%latestjar%" + "%~dp0output.txt"
pause

输出:

注意: 此问题中的 {example_path_here} 仅充当实际目录/文件路径的占位符,例如{example_dir} = "D:\Installation\Logger\"

当前输出:

File Not Found
{root_directory_of_.bat} + {root_directory_of_.bat_with_output_file_name_appended}
Press any key to continue . . .

期望的输出:

{root_directory_of_.bat_with_latest_.jar_file_appended} + {root_directory_of_.bat_with_output_file_name_appended}
Press any key to continue . . .

【问题讨论】:

    标签: windows batch-file command-prompt


    【解决方案1】:

    分析后确定:

    1. 双击事件将使执行发生在 .bat 所在的当前文件夹中。

    2. 文件夹拖放事件导致在拖放文件夹的父目录所在的位置执行。

    第 2 点是问题出现的地方。为了解决这个问题,我们“cd”回到 .bat 文件的目录以完成我们的原始代码。

    以下是问题的修正示例代码示例:

    @echo off
    cd /d %~dp0
    for /f "delims=" %%x in ('dir /od /b logger*.jar') do set latestjar=%%x
    echo "%~dp0%latestjar%" + "%~dp0output.txt"
    pause
    

    这是我试图实现的最终结果:

    @echo off
    cd /d %~dp0
    for /f "delims=" %%x in ('dir /od /b logger*.jar') do set latestjar=%%x
    java -jar "%~dp0%latestjar%" %1 > "%~dp0output.txt"
    

    最后一段代码/最终结果的解释: - 文件夹被拖放到文件资源管理器中的批处理文件中 - 1.代码重置回.bat文件目录 2. 我们遍历目录中类似名称的 .jar 文件并找到最近创建的一个。 3. 我们运行最新的 .jar 文件,参数是拖放文件夹的路径,然后我们将 .jar 的输出输出到与批处理文件位于同一文件夹中的 output.txt 文件。

    【讨论】:

    • 3. We run the latest .jar file, with an argument which is the path of the drag and dropped folder。 “拖放文件夹”将是 %~dp1,而不是 %~dp0
    • 我认为您错过了 %1。这是拖放文件夹的位置。
    【解决方案2】:

    当您“拖动某些东西”到批处理文件时(我假设您的意思是拖动到批处理文件的图标或资源管理器中的批处理文件的名称上),它会在另一个工作文件夹中执行(可能没有.jar %windir%\system32 中的文件)。

    解决方案: 确保工作文件夹是它应该是的。如果它应该与批处理文件所在的文件夹相同,请更改工作文件夹:

    cd /d "%~dp0"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-21
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多