Пакетный файл для результатов поиска в каталоге петель изменяется при нажатии на пакетный файл вместо перетаскивания папки в пакетный файл - PullRequest
1 голос
/ 01 ноября 2019

Постановка проблемы: Перетаскивание папки в пакетный файл изменяет результат цикла for, в то время как простой щелчок по пакетному файлу приводит к другому, но желаемому выводу из упомянутого цикла for.

Справочная информация: Я хочу получить имя последнего созданного файла .jar в папке. Файл .bat будет находиться в этой папке, где находятся .jars. Используя приведенный ниже пример файла .bat, я дважды щелкаю файл .bat и получаю искомый результат, например: {jar_root_dir_path} + "logger-20191030.jar", см. "Требуемый вывод:" раздел ниже для уточнения.

Дело в том, что этот файл .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 \Регистратор \ "

Токовый выход:

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 . . .

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

После анализа было определено следующее:

  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, расположенный в той же папке, что и пакетный файл.

1 голос
/ 01 ноября 2019

Когда вы «перетаскиваете что-то» в пакетный файл (я предполагаю, что вы имеете в виду перетаскивание на значок пакетного файла или имя пакетного файла в Проводнике), оно выполняется в другой рабочей папке (вероятно, нет .jarфайлы в %windir%\system32).

Решение: убедитесь, что рабочая папка соответствует требованиям. Если это должна быть та же папка, в которой находится ваш пакетный файл, измените рабочую папку на:

cd /d "%~dp0"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...