Ошибка неправильный параметр или аргумент

Sys-Admin Forum

Loading

Forfiles — консольная утилита Windows для операций с файлами, которая уже присутствует в стандартной поставке в Windows7 и WS2008R2. Позволяет производить поиск по маске иили возрасту и применять действия к найденным файлам.

Например, данная команда найдет и удалит все файлы по маске *.log старше месяца:

forfiles /P D:logs /S /D 30 /M *.log /С "cmd /C del @file" >> log.txt

Где:

/P D:logs — путь
/S — рекурсивно
/D 30 — по дате, старше 30 дней
/M *.log — маска поиска
/С cmd — вызов командной строки
/C del — вызов команды удалить
@file — возвращает имена найденных файлов
>> log.txt — перенаправить вывод команды в лог файл

Можно сохранить как батник и запихать в крон планировщик задач.

Пара примеров:
Удалить файлы в каталогах по маске .svn по пути D:project, оставив сами каталоги:

forfiles /P D:project /S /M .svn -c "cmd /c del /S @file"

Удалить непустые каталоги по маске .svn со всем содержимым:

forfiles /P D:project /S /M .svn -c "cmd /c rmdir /S @file"

Справка по использованию:

forfiles /?

FORFILES [/P < путь>] [/M < маска_поиска>] [/S]
         [/C < команда>] [/D [+ | -] {dd.MM.yyyy | dd}]

Описание.
    Выбор файла (или набора файлов) и выполнение команды
    с этим файлом. Программа полезна для пакетных заданий.

Параметры:
    /P  < путь>          Путь, с которого начинается поиск.
                        По умолчанию используется текущая
                        рабочая папка (.).

    /M  < маска_поиска>  Поиск файлов с помощью маски.
                        Маска поиска по умолчанию "*" .

    /S                  Рекурсивное выполнение программы forfiles
                        во всех  подпапках, аналогично "DIR /S".

    /C  < команда>       Команда, которая выполняется для каждого файла.
                        Строки команд необходимо заключать в прямые
                        кавычки.

                        Команда по умолчанию "cmd /c echo @file".

                        Следующие переменные могут использоваться
                        в строке команды:
                        @file    - возвращает имя файла.
                        @fname   - возвращает имя файла без
                                   расширения.
                        @ext     - возвращает только расширение имени
                                   файла.
                        @path    - возвращает полный путь к файлу.
                        @relpath - возвращает относительный путь к
                                   файлу.
                        @isdir   - возвращает значение "TRUE", если типом
                                   файла является папка, и "FALSE" для файлов.
                        @fsize   - возвращает размер файла
                                   в байтах.
                        @fdate   - возвращает дату последнего изменения
                                   файла.
                        @ftime   - возвращает время последнего изменения
                                   файла.

                        Для включения специальных символов в строку команды
                        следует использовать шестнадцатеричный код символа
                        в формате 0xHH (например, 0x09 для табуляции).
                        Перед внутренними командами CMD.exe необходимо ставить
                        "cmd /c".

    /D  < дата>          Выбор файлов, у которых дата последнего изменения
                        больше или равна (+) либо меньше или равна
                        (-) указанной дате при использовании формата
                        "dd.MM.yyyy"; либо файлов, у которых дата  последнего
                        изменения больше или равна (+)
                        текущей дате плюс "dd" дней либо меньше или
                        равна (-) текущей дате минус "dd" дней.
                        Допустимым числом дней "dd" является любое
                        число в диапазоне 0 - 32768.
                        "+" используется по умолчанию, если знак не указан.

    /?                  Вывод справки по использованию.

Примеры:
    FORFILES /?
    FORFILES
    FORFILES /P C:WINDOWS /S /M DNS*.*
    FORFILES /S /M *.txt /C "cmd /c type @file | more"
    FORFILES /P C: /S /M *.bat
    FORFILES /D -30 /M *.exe
             /C "cmd /c echo @path 0x09 был изменен 30 дней назад"
    FORFILES /D 01.01.2001
             /C "cmd /c echo @fname является новым с 1-янв-2001"
    FORFILES /D +18.10.2013 /C "cmd /c echo @fname является новым сегодня"
    FORFILES /M *.exe /D +1
    FORFILES /S /M *.doc /C "cmd /c echo @fsize"
    FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"

Если выдает такую ошибку (для разных языков):

ОШИБКА: Неправильный параметр или аргумент - '/С'.
ERROR: Invalid syntax. Value expected for '/C'.

Значит параметр /C не срабатывает, помогает замена на , как сделано в паре примеров.
Как выяснилось, в WS2003R2 (предполагаю что на WXP тоже) срабатывают оба параметра, а в WS2008R2 и W7 только .

Привелось удалять логи из каталога c:ProgramDataPath и на выполнение действия для каждого вложенного каталога просил подтверждения. Параметра /fforce для forfiles нет. Пришлось сделать так:

echo Y | forfiles /P c:ProgramDataPath /S /D -21 /c "cmd /c del /s @file"

 
SKIPtr ©
 
(2014-01-21 18:29)
[0]

драсте пишу задание для планировщика
нужно записать ввиде командной строки
вот пишу пример

SchTasks /Create /TN "задание" /TR "shutdown -s -t 0" /SC ONCE /ST 23:59 /SD 21/1/2014

получаю ответ

ОШИБКА: Неправильный параметр или аргумент - "-s".

подскажите в чем ошибка и как решить эту проблему


 
Rouse_ ©
 
(2014-01-21 19:02)
[1]

С консоли задается нормально (ну только дата должна быть 21/01/2014), видимо пытаешься выполнить снаружи и не учитываешь кавычки, и происходит выход на SHUTDOWN у которого действительно нет параметра -s


 
Rouse_ ©
 
(2014-01-21 19:04)
[2]

А вообще с планировщиком лучше работать через его интерфейс, благо он полностью документирован
http://msdn.microsoft.com/en-us/library/aa383614%28v=VS.85%29.aspx


 
SKIPtr ©
 
(2014-01-21 21:38)
[3]


> видимо пытаешься выполнить снаружи и не учитываешь кавычки,
>  и происходит выход на SHUTDOWN у которого действительно
> нет параметра -s

можно по подробей мне обьяснить что конкретно я делал не так
а то я щас замеил ошибку он дает не всегда
и ошибку он дает когда в параметрах присутствует пробел
у меня до этого было TN “Последнее задание”
и он писал что такая ошибка в "задание""


 
Inovet ©
 
(2014-01-21 21:40)
[4]

> [3] SKIPtr ©   (21.01.14 21:38)
> можно по подробей

Сказали же — неправильно передаёшь двойные кавычки.


 
SKIPtr ©
 
(2014-01-21 22:08)
[5]


> Сказали же — неправильно передаёшь двойные кавычки.

ух ты и правда переписал кавычки и ошибка исчезла
получаеться в пояснении в качестве примера передают не правильные  кавычки


 
Inovet ©
 
(2014-01-21 22:32)
[6]

> [5] SKIPtr ©   (21.01.14 22:08)

Это в каком пояснении?


 
SKIPtr ©
 
(2014-01-22 06:16)
[7]

на сайте читаю как ей пользоваться
и примеры пытаюсь запустить и вот получаю такой результат


 
SKIPtr ©
 
(2014-01-22 06:16)
[8]

на сайте читаю как ей пользоваться
и примеры пытаюсь запустить и вот получаю такой результат


 
Inovet ©
 
(2014-01-22 06:30)
[9]

> [7] SKIPtr ©   (22.01.14 06:16)

Так пример покажи.


 
SKIPtr ©
 
(2014-01-22 20:01)
[10]


> Так пример покажи.

вот перенес копированием
SchTasks /Create /TN “Последнее задание” /TR “shutdown –s –t 0” /SC ONCE /ST 23:59 /SD 21/12/2012


 
Styx
 
(2014-01-22 20:09)
[11]

Нут так Вы из интернета скопипастили, а там CMS-ка кавычки «приукрасила»…


 
SKIPtr ©
 
(2014-01-22 20:26)
[12]

еще подскажите пожалуста
как вывести содержимое заданий определеной папки
команда SchTasks /Query выводит все папки
вот команда выводит все папки
как увидеть только содержимое конкретной папки


Ezhyg, так-то почитал про taskkill, понравилось, что там можно указывать пользователя и пароль, но не понял, как именно службу остановить или перезапустить. Где предложили такую конструкцию:

TASKKILL /F /FI «SERVICES eq wuauserv»

у меня она не работает. Что может сказать по этому поводу? Что неправильного?
Вот что выдаёт командная строка:

C:WINDOWSsystem32>TASKKILL /F /FI «SERVICES eq wuauserv»
Ошибка: Неправильный параметр или аргумент - 'eq'.
Введите "TASKKILL /?" для получения справки по использованию.

How to execute .cmd file with this commands:

TASKKILL /F /PID 14364
MOVE /Y "C:/Users/BBCCA/AppData/Roaming/DWAKU2DWAKU2.exe" "D:/DWAKU2/build-    DWAKU2-Desktop_Qt_5_15_2_MinGW_64_bit_Static-Release/release"
START "" "D:/DWAKU2/build-DWAKU2-Desktop_Qt_5_15_2_MinGW_64_bit_Static-Release/release/DWAKU2.exe"

How can I execute this script with command console in qt?
As you can see — first command close qt application.


Firstly, I tried to use QProcess to execute all commands inside it.

auto programmName = QFileInfo(QCoreApplication::applicationFilePath()).fileName();
QProcess consola;
QString command = "cmd";
QStringList commandArgs;
QString subcommand1, subcommand2;
subcommand1 += "TASKKILL /IM ";
subcommand1 += programmName;
subcommand2 += "DEL /Q ";
subcommand2 += QCoreApplication::applicationFilePath();
commandArgs << "/c" << subcommand1 << "&&" << subcommand2;
qDebug() << commandArgs;
consola.startDetached(command, commandArgs);
consola.waitForFinished();

But it doesn’t execute with error:

Ошибка: Неправильный параметр или аргумент — ‘/Q’. Введите «TASKKILL
/?» для получения справки по использованию.

Translation:

Error: Incorrect parameter or argument — ‘/Q’. Enter «TASKKILL /?» for
help on how to use it.

After lots of reading docs and asking ru.stuckoverflow — gave up on this idea and tried to use cmd file.
You can read it above.

Execution of this file was:

// Make updater script
    if (fileCorrect){
        ui->LoadingAnimationLabel->setText(bLText + "Making updater script... " + aLText);
        QFile file(appDataPath + QDir::separator() + "updater.cmd");
        if (file.open(QIODevice::WriteOnly)) {

            auto pid = "TASKKILL /F /PID " + QString::number(QCoreApplication::applicationPid()) + "rn";
            auto move = "MOVE /Y "" + appDataPath + QDir::separator() + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + "" "" + QCoreApplication::applicationDirPath() + ""rn";
            auto start = "START "" "" + QCoreApplication::applicationFilePath() + ""rn";

        file.write(pid.toLocal8Bit());
        file.write(move.toLocal8Bit());
        file.write(start.toLocal8Bit());

        } else fileCorrect = false;
        file.close();
    }

    // Installing updates
    if (fileCorrect){
        ui->LoadingAnimationLabel->setText(bLText + "Installing update files... " + aLText);
        auto command = appDataPath + QDir::separator() + "updater.cmd";
        QProcess updater;
        updater.startDetached(appDataPath + QDir::separator() + "updater.cmd");
    }

When programm executed this file — only first command was executed.
But when I tried to execute this file by clicking it — it worked fine….

Понравилась статья? Поделить с друзьями:
  • Ошибка неправильный запрос
  • Ошибка неподдерживаемый протокол ssl
  • Ошибка неправильный блок окружения ubuntu
  • Ошибка неподдерживаемое оборудование
  • Ошибка неправильный url