Назад | Перейти на главную страницу

Запланировать пакетный файл с параметрами, содержащими пробелы

Мне нужно запланировать задачу в Windows Server 2003, которая выполняет этот сценарий, который удаляет файлы старше n дней в указанной папке. Скрипту нужно 3 параметра:

%1 path to folder where files need to be deleted
%2 file names (es. *.log)
%3 number of days 

@echo off
forfiles -p %1 -s -m %2 -d -%3 -c "cmd /c del /q @path"

Скрипт отлично работает, если в первом параметре нет пробелов. Это пример работающих параметров:

"C:\Program Files\SCRIPT\DeleteFilesOlderThanXDays.cmd" N:\FOLDER\FOLDER *.zip 60

Это пример, который не работает:

"C:\Program Files\SCRIPT\DeleteFilesOlderThanXDays.cmd" N:\Program Files\LOG *.zip 60

Это тоже не работает:

"C:\Program Files\SCRIPT\DeleteFilesOlderThanXDays.cmd" "N:\Program Files\LOG" *.zip 60

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

Спасибо всем за помощь

Не полное решение, но обходной путь, который может заставить вашу задачу работать, пока вы не найдете лучшее решение: вы можете попробовать вызвать командный файл, который не принимает параметры и ничего не делает, кроме вызова "C:\Program Files\SCRIPT\DeleteFilesOlderThanXDays.cmd" "N:\Program Files\LOG" *.zip 60

В вашем пакетном файле добавьте кавычки вокруг параметров, которые могут включать пробелы. Итак, по крайней мере, около% 1.

@echo off forfiles -p "%1" -s -m %2 -d -%3 -c "cmd /c del /q "@path""

Спасибо за ваши ответы. После дальнейших исследований выясняется, что командный файл следует изменить, добавив кавычки вокруг @path, чтобы разрешить пробелы:

@echo off forfiles -p% 1 -s -m% 2 -d -% 3 -c "cmd / c del / q" @path ""

Параметр пути также должен быть заключен в кавычки из-за пробелов:

"C: \ Program Files \ SCRIPT \ DeleteFilesOlderThanXDays.cmd" "N: \ Program Files \ LOG" * .zip 60

Теперь это тоже не работает, потому что при наличии "C: \ Program Files \ SCRIPT \ DeleteFilesOlderThanXDays.cmd", за которым следует параметр в кавычках, возникает ошибка типа "C: \ Program не распознается как внутренняя или внешняя команда ..." так что снова не повезло.

Обходной путь, который работает:

"C: \ Program Files \ SCRIPT \ DeleteFilesOlderThanXDays.cmd". * .zip 60

Начать в: "N: \ Program Files \ LOG"