Как узнать аргументы запуска программы
Перейти к содержимому

Как узнать аргументы запуска программы

  • автор:

Как узнать аргументы запуска программы

Поиск в рубрике

Возможно, вы слышали о небольших хаках, которые работают с Chrome, Вы можете добавить небольшой «переключатель» к ярлыку Chrome и изменить его поведение. Мы рассмотрели один, который позволяет вам запускать Chrome в определенном профиле , и это довольно полезно. Chrome — не единственное приложение, которое поддерживает эти маленькие «переключатели», многие приложения поддерживают, и эти переключатели на самом деле являются аргументами командной строки, которые поддерживают приложения.

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

Аргументы командной строки — диспетчер задач

Это самый простой метод для просмотра командной строки аргументы для работающего приложения в Windows 10. Откройте диспетчер задач. Щелкните правой кнопкой мыши заголовок любого из столбцов и выберите «Командная строка» в меню. Это добавит новый столбец «Командная строка». Найдите свое приложение в списке «Процессы» и проверьте, что для него отображается в столбце «Командная строка». Он покажет вам все аргументы командной строки, которые использовались при запуске приложения.

Аргументы командной строки — командная строка

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

Откройте диспетчер задач. Найдите приложение на вкладке «Процессы» и щелкните его правой кнопкой мыши. Выберите «Перейти к деталям» в контекстном меню. Это переключит вас на вкладку Details в диспетчере задач с выделенным приложением. Запишите значение в столбце PID.

Откройте командную строку и выполните следующую команду. Замените четыре нуля значением PID для приложения. Значение может быть намного больше, чем четыре цифры, не беспокойтесь о соответствии длины. Здесь четыре ноля являются просто фиктивными значениями.

Command

Example

Команда вернет все переключатели для этого конкретного процесса. Помните, что некоторые приложения могут запускать несколько экземпляров, и каждый экземпляр будет иметь свой собственный PID. Вы должны отследить правильный PID и использовать его для команды. Вы можете получить аргументы командной строки, которые использует другой экземпляр, если вы не будете осторожны.

Windows Гайды

Для получения большей информации о секретах и подсказках по разделу Windows легко перейдите в гайды Windows по указанной выше ссылке.

How to get list of arguments?

I’d like to find a Windows batch counterpart to Bash’s $@ that holds a list of all arguments passed into a script.

Or I have to bother with shift ?

13 Answers 13

dancavallaro has it right, %* for all command line parameters (excluding the script name itself). You might also find these useful:

%0 — the command used to call the batch file (could be foo , ..\foo , c:\bats\foo.bat , etc.)
%1 is the first command line parameter,
%2 is the second command line parameter,
and so on till %9 (and SHIFT can be used for those after the 9th).

nx0 — the actual name of the batch file, regardless of calling method (some-batch.bat)
%

dp0 — drive and path to the script (d:\scripts)
%

dpnx0 — is the fully qualified path name of the script (d:\scripts\some-batch.bat)

dpn0 will return the drive and path to the script plus the name of the batch file, but not the extension. I found this particularly useful when creating batch scripts that call a .ps1 file with the same name. Essentially, the d refers to the drive, p refers to the path, n refers to the name of the file, and x refers to the extension. With that information, you can do quite a lot.

%* seems to hold all of the arguments passed to the script.

%1 . %n and %* holds the arguments, but it can be tricky to access them, because the content will be interpreted.
Therefore it is impossible to handle something like this with normal statements

Each line fails, as cmd.exe try to execute one of the ampersands (the content of %1 is «&»& )

But there exists a workaround with a temporary file

The trick is to enable echo on and expand the %1 after a rem statement (works also with %2 .. %*).
But to be able to redirect the output of echo on , you need the two FOR-LOOPS.

The extra characters * # are used to be safe against contents like /? (would show the help for REM).
Or a caret ^ at the line end could work as a multiline character.

The FOR /F should be work with delayed expansion off, else contents with «!» would be destroyed.
After removing the extra characters in param1 and you got it.

And to use param1 in a safe way, enable the delayed expansion.

Edit: One remark to %0

%0 contains the command used to call the batch, also preserving the case like in FoO.BaT
But after a call to a function %0 and also in %

0 contains the function name (or better the string that was used to call the function).
But with %

f0 you still can recall the filename.

f0 trick is totally unexpected, way cool, and potentially very useful 🙂 Not surprisingly, the other modifiers work the same way, always operating on the parent batch file, even when in a called subroutine. This seems worthy of its own Q&A — "How to access the name of the running batch when in a called subroutine?"

I found that next time when you need to look up these information. Instead of opening a browser and google it, you could just type call /? in your cmd and you’ll get it:

The way to retrieve all the args to a script is here:

djangofan's user avatar

Here is a fairly simple way to get the args and set them as env vars. In this example I will just refer to them as Keys and Values.

Save the following code example as «args.bat». Then call the batch file you saved from a command line. example: arg.bat —x 90 —y 120

I have provided some echo commands to step you through the process. But the end result is that —x will have a value of 90 and —y will have a value of 120(that is if you run the example as specified above 😉 ).

You can then use the ‘if defined’ conditional statement to determine whether or not to run your code block. So lets say run: «arg.bat —x hello-world» I could then use the statement «IF DEFINED —x echo %—x%» and the results would be «hello-world». It should make more sense if you run the batch.

enter image description here

For to use looping to get all arguments and in pure batch:

Obs: For using without: ?*&<>

Your code is ready to do something with the argument number where it needs, like.

Io-oI's user avatar

The following code simulates an array (‘ params ‘) — takes the parameters received by the script and stores them in the variables params_1 .. params_n , where n = params_0 =the number of elements of the array:

If you have parameters in quotes that containing spaces, %* will not work correctly. The best solution I found is to have a loop that joins all arguments: https://serverfault.com/a/22541

You can use For Commad,to get list of Arg.

Help : For /? Help : Setlocal /?

Do not need Shift command.

Lot of the information above led me to further research and ultimately my answer so I wanted to contribute what I wound up doing in hopes it helps someone else:

I also wanted to pass a varied number of variables to a batch file so that they could be processed within the file.

I was ok with passing them to the batch file using quotes

I would want them processed similar to the below — but using a loop instead of writing out manually:

So I wanted to execute this:

And via the magic of for loops do this within the batch file:

Problem I was having is that all my attempts to use a for loop weren’t working. The below example:

even after setting

Reason was that the for loop read the whole line and assigned my second parameter to %%B during the first iteration of the loop. Because %* represents all arguments, there is only a single line to process — ergo only one pass of the for loop happens. This is by design it turns out, and my logic was wrong.

So I stopped trying to use a for loop and simplified what I was trying to do by using if, shift, and a goto statement. Agreed its a bit of a hack but it’s more suited to my needs. I can loop through all of the arguments and then use an if statement to drop out of the loop once I process them all.

The winning statement for what I was trying to accomplish:

UPDATE — I had to modify to the below instead, I was exposing all of the environment variables when trying to reference %1 and using shift in this manner:

Как узнать аргументы командной строки запущенной программы?

Я ищу инструмент или метод, чтобы узнать, какие параметры командной строки были переданы программе, например, когда она была запущена другой программой (сценарий запуска приложения).

8 answers

Вы можете сделать это с помощью Обозревателя процессов.

Просто наведите курсор мыши на процесс, чтобы увидеть аргументы командной строки, используемые для его запуска:
List of

В качестве альтернативы вы можете открыть свойства процесса и проверить командную строку прямо там:
Properties of a

Вы также можете сделать это без проводника процессов, используя службу WMI Windows. Выполните следующие действия из командной строки:

Если вы хотите сбросить выходные данные в файл (это немного облегчает чтение), используйте переключатель /OUTPUT:

Этого также можно достичь с помощью диспетчера задач .

Откройте диспетчер задач (с помощью CTRL-SHIFT-ESC, CTRL-ALT-УДАЛИТЬ или любым другим способом).

Для Windows 7 (и, возможно, Windows XP):

  • Перейдите на вкладку «Процессы». В меню «Вид» выберите «Выбрать столбцы. «.
  • Установите флажок «Командная строка» и нажмите кнопку ОК. (Возможно, вам придется прокрутить вниз, чтобы найти его)

Для Windows 8:

  • Перейдите в раздел «Подробности» вкладка. Щелкните правой кнопкой мыши на любом из столбцов (например. Имена, PID и т.д.) и выберите «Выбрать столбцы».
  • Установите флажок «Командная строка» и нажмите кнопку ОК. (Возможно, вам придется прокрутить вниз, чтобы найти его)

Столбец командных строк будет добавлен к отображаемым в данный момент столбцам.

PowerShell спешит на помощь.

И убейте в качестве бонуса:

Вы можете запустить его непосредственно из powershell или с ps1, если у вас есть настройки системы. Я подробно описываю неограниченную настройку скрипта на я убиваю зомби с помощью powershell, а также другие трюки powershell.

Предыдущие ответы хороши в том случае, если процесс уже запущен и не собирается завершаться в ближайшее время. Однако, если вам нужно (как и мне) сделать это, возможно, с помощью процессов, запускаемых несколько раз и/или быстро завершающихся, или, возможно, регистрирующих события в течение более длительного периода времени, есть способ сделать это с помощью Монитор процесса.

В основном он регистрирует различные события в системе, в этом случае мы можем просто отфильтровать событие «Запуск процесса» и имя процесса мы хотим отслеживать, как показано ниже:

enter image description here

Затем просто продолжайте работать с монитором процессов и делайте все, что вы делаете, чтобы запустить процесс, который вы хотите зарегистрировать. Вы можете увидеть либо в столбце «Подробности», либо в столбце «Командная строка» (зависит от того, как вы их настроите) аргументы командной строки. Например:

enter image description here

Конечно, таким образом вы можете извлечь гораздо больше связанной информации, такой как рабочий каталог, какая среда переменные были переданы в процесс и т.д. Также легко экспортировать результаты в файл.

При использовании CygWin, если я запускаю процесс Python, это пример командной строки:

Но Обозреватель процессов видит только основной исполняемый файл:

Process Explorer not detecting full command line of Python process

(обратите внимание на «путь: [Сообщение об ошибке процесса открытия]» (см. РЕДАКТИРОВАНИЕ-1)). Те же результаты для tasklist :

Итак, единственный трюк, который я знаю до сих пор, — это найти его с помощью оболочки CygWin Bash pgrep :

Полезно знать это, пока CygWin сожительствует без проблем в Windows, и вы можете использовать его для запуска многих программ на POSIX и Python.

ИЗМЕНИТЬ: В Windows, похоже, вам не нужны права администратора для списка задач. В CygWin вам понадобится, чтобы они могли просматривать процесс администратора (что мне кажется более логичным: полная командная строка может содержать некоторые параметры, такие как пароли внутри), поэтому мы должны запустить CygWin Bash в с повышенными правами Режим администратора.

ПРАВКА-1: Эта проблема не возникнет, если вы запустите Обозреватель процессов от имени администратора. Спасибо, что указал, @Pacerier.

Я знаю, что ОП задал вопрос относительно Windows 7, и есть несколько отличных ответов.

Я столкнулся с этой проблемой в windows 10, и я не хотел использовать ProcessExplorer или какую-либо утилиту, а скорее простой способ получить аргументы командной строки процесса FFMPEG, который был инициирован инструментом преобразования видео. Но эти шаги применимы к любому процессу, который запускается с использованием аргументов командной строки.

Как узнать аргументы командной строки работающей программы?

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

7 ответов 7

Вы также можете сделать это без Process Explorer, используя службу WMI Windows. Запустите следующее из командной строки:

Если вы хотите вывести выходные данные в файл (это немного облегчает чтение), используйте параметр /OUTPUT:

Вы можете сделать это с помощью Process Explorer.

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

Кроме того, вы можете открыть свойства процесса и проверить командную строку прямо здесь:

Этого также можно добиться с помощью диспетчера задач.

Откройте диспетчер задач (с помощью CTRL-SHIFT-ESC, CTRL-ALT-DELETE или любым другим способом).

Для Windows 7 (и, вероятно, Windows XP):

  • Перейдите на вкладку «Процессы». В меню «Вид» выберите «Выбрать столбцы . ».
  • Установите флажок «Командная строка» и нажмите ОК. (Возможно, вам придется прокрутить вниз, чтобы найти его)

Для Windows 8:

  • Перейдите на вкладку «Подробности». Щелкните правой кнопкой мыши по любому из столбцов (например, Имена, PID и т.д.) И выберите «Выбрать столбцы».
  • Установите флажок «Командная строка» и нажмите ОК. (Возможно, вам придется прокрутить вниз, чтобы найти его)

Столбец командных строк будет добавлен к отображаемым в данный момент столбцам.

PowerShell для спасения.

найти и убить в качестве бонуса. вы можете запустить его из powershell напрямую или из ps1, если у вас есть настройки вашей системы. Я подробно описываю неограниченную настройку сценариев:я убиваю зомби с помощью PowerShell, а также другие трюки с PowerShell .

Предыдущие ответы хороши, если процесс уже запущен и не скоро завершится. Однако, если вам нужно (как я это сделал), возможно, когда процессы запускаются несколько раз и / или быстро завершаются, или, возможно, регистрируют события в течение более длительного периода времени, есть способ сделать это с помощью Process Monitor.

По сути, он регистрирует различные события в системе, в этом случае мы можем просто отфильтровать событие «Запуск процесса» и имя процесса, который мы хотим отслеживать, как показано ниже:

Затем просто оставьте монитор процесса включенным и делайте все, что вы делаете, чтобы запустить процесс, который вы хотите регистрировать. В столбце «Сведения» или в столбце «Командная строка» (в зависимости от того, как вы их настраиваете) вы можете видеть аргументы командной строки. Например:

Конечно, таким образом вы можете извлечь гораздо больше связанной информации, такой как рабочий каталог, какие переменные среды были переданы процессу и т.д. Также легко экспортировать результаты в файл.

При использовании CygWin, если я запускаю процесс Python, это пример командной строки:

Но Process Explorer видит только основной exe:

Process Explorer не обнаруживает полную командную строку процесса Python

(обратите внимание на «путь: [Ошибка открытия процесса сообщения]» (см. РЕДАКТИРОВАТЬ-1)). Те же результаты для tasklist :

Итак, единственный трюк, который я знаю до сих пор, это найти его через оболочку CygWin Bash pgrep :

Это полезно знать, поскольку CygWin без проблем работает в Windows, и вы можете использовать его для запуска многих программ POSIX и Python.

РЕДАКТИРОВАТЬ: В Windows вам не нужны привилегии администратора для списка задач. В CygWin они вам понадобятся, чтобы иметь возможность просматривать процесс администратора (что кажется мне более логичным: полная командная строка может иметь некоторые параметры, например пароли внутри), поэтому мы должны запустить CygWin Bash в режиме администратора с повышенными правами.

РЕДАКТИРОВАТЬ-1: Эта проблема не произойдет, если вы запустите Process Explorer от имени администратора. Спасибо, что указали, @Pacerier.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *