Мне нужно запланировать задачу в 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"