Я пытаюсь написать пакетный скрипт, который будет запускаться каждые 15 минут, проверять количество файлов в каталоге и, если это число больше, чем установить ограничение, переместите все файлы в другой каталог. Я бы легко сделал это в скрипте bash, но это мой первый пакетный скрипт.Пакетный сценарий Windows 2003 с трубой
Я разделил эту задачу в несколько этапов:
Находим количество файлов в каталоге. Мне удалось сделать это с помощью этой команды:
dir/b/a-d d: \ test \ test2 | find/v/c "::"
Следующая вещь - назначить вывод этой команды некоторой переменной, чтобы я мог сравнить ее с моим желаемым пределом. Здесь начинается проблема.
ECHO OFF setlocal enableextensions FOR /F "tokens=* USEBACKQ" %%a IN (`dir/b/a-d d:\test\test2 ^| find /v /c "::"`) DO (@SET NUMFIL=%%a) ECHO %NUMFIL% endlocal
Я получаю: "| было неожиданным в это время". Очевидно, что труба мешает. Я обнаружил, что это особый характер и как таковой должен быть экранирован кареткой. После этого я получаю: «Синтаксис команды был неправильным». Это сервер Windows 2003.
3.После получения эта проблема решена, я планирую вставить что-то вроде этого:
IF %%NUMFIL%% > 20
(move "d:\test\test2\ti*" "d:\test\test2\dir\")
Это было бы переместить все, что файлы (все они начинаются с «ти») к желаемый каталог.
Так что мои вопросы были бы следующими: что делать с проблемой №2 и будет работать в этом случае?
'FOR' и' DO' должны находиться на одной линии. – indiv
# 3: Удивительно, что синтаксис сравнения объясняется на 'IF /?' – jeb
Спасибо indiv, положив его на ту же линию. – Vald