Ошибка не найдены файлы отвечающие условиям поиска

Я работаю с пакетным файлом для удаления архивированных документов старше 14 дней, и я вызываю файл из процесса автоматизации (LANSA Composer), который читает код возврата скрипта, чтобы узнать, была ли проблема. Вот скрипт:

@echo off
@Echo Deleting files older than 14 days...
cd /d C:WindowsSystem32
FORFILES /P "[file path...]IDOC_ARCHIVE" /M *.* /D -14 /C "cmd /c del @file"

проблема в том, что скрипт возвращает код ошибки и печатает «ERROR: No files found with the specified search criteria», если он не находит файлы для удаления, когда я действительно хочу, чтобы он вернул ошибку, если есть проблема с доступом к каталогу или запуском команды del и т. д. Есть ли способ заставить этот скрипт подавить ошибку «нет найденных файлов», но позволить другим пройти?

после некоторого Googling я попробовал решения на на этой странице, но они не будут работать для того, что я хочу, так как в первом случае он подавляет все ошибки, а во втором передается текст сообщения об ошибке, но фактический код возврата по-прежнему подавляется (что является то, что автоматизация процесс чтения).

6 ответов


Это должно решить этот вопрос:

@echo off
Echo Deleting files older than 14 days...
cd /d C:WindowsSystem32
copy /b forfiles.exe "[file path...]IDOC_ARCHIVE" >nul
FORFILES /P "[file path...]IDOC_ARCHIVE" /M *.* /D -14 /C "cmd /c del @file"

решение состоит в том, чтобы захватить выходные данные команды FORFILES в цикле FOR, найти строки, начинающиеся с ошибки, и сохранить результат в переменной. Оттуда вы можете использовать директивы IF/ELSE для установки errorlevel соответственно. Вот код (минус несколько журналов и комментариев):

cd /d C:WindowsSystem32
SET _CmdResult=NONE
FOR /F "tokens=*" %%a IN ('FORFILES /P "[file path...]IDOC_ARCHIVE" /M *.* /D -14 /C "cmd /c DEL @file" 2^>^&1 ^| FINDSTR ERROR') DO SET _CmdResult=%%a
IF "%_CmdResult%" == "ERROR: No files found with the specified search criteria." ( 
    SET errorlevel=0 
 ) ELSE ( 
    SET errorlevel=1
 )
IF "%_CmdResult%" == "NONE" SET errorlevel=0

просто убедитесь, что избежать любых символов, таких как >&| в цикле FOR.


добавление 2>nul сделало трюк. Спасибо!

forfiles /п d:todayfiles /Д +0 /ц «УМК /с Эхо @путь» 2 > nul / найти «: «/c


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

Примеры:

отладка и устранение ошибок в частности:

forfiles /p "[file path...]IDOC_ARCHIVE" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&ECHO found error||echo found success

использование oneliner чтобы вернуть успех или неудачу ERRORLEVEL:

forfiles /p "[file path...]IDOC_ARCHIVE" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&EXIT /B 1||EXIT /B 0

использование oneliner для сохранения уровня ошибок на нуле для успеха в контексте batchfile посреди другого кода (ver > nul сбрасывает уровень ошибок):

forfiles /p "[file path...]IDOC_ARCHIVE" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&ECHO found error||ver > nul

для шага задания CmdExec агента SQL Server я приземлился на следующем. Я не знаю, является ли это ошибкой, но CmdExec в пределах шага распознает только первую строку кода:

cmd /e:on /c "forfiles /p "C:SQLADMINMAINTREPORTSSQL2" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&EXIT 1||EXIT 0"&exit %errorlevel%

надежную влияет на ошибки нужно выполнить последующую команду, которая гарантирует ошибки 0.
Я использую сам интерпретатор команд (cmd.exe), чтобы сделать это, как в следующем фрагменте:

FORFILES  /M:somefiles /D -14 2>nul | cmd /c ""

надеюсь, это кому-то поможет.


это легко разрешимо с одним вкладышем. Просто добавьте это в команду forfiles:

2>&1 | find /v /i "ERROR: No files found with the specified search criteria."

так что вы получите:

FORFILES /P "[file path...]IDOC_ARCHIVE" /M *.* /D -14 /C "cmd /c del @file" 2>&1 | find /v /i "ERROR: No files found with the specified search criteria."

только указанное сообщение об ошибке не отображается. Все остальные сообщения.

вот как это работает:

  • 2>&1 используется для отправки STDERR в же куда мы отправляем STDOUT.
  • | find /v /i труб выход из forfiles to найти здесь /v означает, что не содержит указанную строку и /i значит без учета регистра

1

автор: Christiaan Westerbeek


Might I add a humble contribution to this already valuable thread. I’m finding that other solutions might get rid of the actual error text but are ignoring the %ERRORLEVEL% which signals a fail in my application. AND I legitimately want %ERRORLEVEL% just as long as it isn’t the «No files found» error.

Some Examples:

Debugging and eliminating the error specifically:

forfiles /p "[file path...]IDOC_ARCHIVE" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&ECHO found error||echo found success

Using a oneliner to return ERRORLEVEL success or failure:

forfiles /p "[file path...]IDOC_ARCHIVE" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&EXIT /B 1||EXIT /B 0

Using a oneliner to keep the ERRORLEVEL at zero for success within the context of a batchfile in the midst of other code (ver > nul resets the ERRORLEVEL):

forfiles /p "[file path...]IDOC_ARCHIVE" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&ECHO found error||ver > nul

For a SQL Server Agent CmdExec job step I landed on the following. I don’t know if it’s a bug, but the CmdExec within the step only recognizes the first line of code:

cmd /e:on /c "forfiles /p "C:SQLADMINMAINTREPORTSSQL2" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&EXIT 1||EXIT 0"&exit %errorlevel%

0 / 0 / 0

Регистрация: 05.10.2011

Сообщений: 18

1

05.10.2011, 07:53. Показов 14039. Ответов 19


Студворк — интернет-сервис помощи студентам

Добрый день.
Подскажите, пожалуйста, как написать скриптик.

1) Хочу удалить папки, вместе с внутренними файлами, которые были созданы — 14 дней назад.
При скрипте приведённом ниже удаляются только файлы, папки остаются. Подскажите как удалить папки?
2) Если я ,буду использовать путь с русскими символомами как сделать поддержку кодировки?
К примеру так: Z:Приветprocessed

forfiles.exe /p Z:0004110processed /s /d -14 /c «cmd /c del /q /f @file»

3) Вместо пункта 2 есть идея переименовывать файл перед удалением.
Подскажите как реализовать переменование файла?



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

05.10.2011, 07:53

19

835 / 349 / 12

Регистрация: 04.10.2009

Сообщений: 589

05.10.2011, 15:24

2

Ну проще всего будет вариант добавить к этому коду удаление пустых папок.
Возможно будет работать так.
forfiles.exe /p Z:0004110processed /s /d -14 /c «cmd /c del /q /f @file & rd @path»

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



1



r18romik

0 / 0 / 0

Регистрация: 05.10.2011

Сообщений: 18

06.10.2011, 07:53

 [ТС]

3

SQL
1
2
3
4
5
6
7
chcp 1251
 
forfiles.exe /p Z:Д0000911processed /s /d -6 /c "cmd /c del /q /f @file"
 
rem forfiles.exe /p Z:Д0000911processed /s /d -6 /c "cmd /c del /q /f @file & rd @path"
 
Pause

Делаю так, но при установки chcp 1251 русская буква Д заменяется на символ — и скрипт выдаёт ошибку, что указанный каталог не найден.

Добавлено через 5 минут
Указываю путь: Z:Д0000911processed
В этом каталоге есть ещё подпапки Z:Д0000911processed6.10.20115:55
К примеру файлы удаляются из папка 5:55, а папки должны удаляться обе.



0



835 / 349 / 12

Регистрация: 04.10.2009

Сообщений: 589

06.10.2011, 09:05

4

Ну вообще очень странно что у вас chcp 1251 не работает.
У случаем не win 7 стоит?
Ну тогда текст нужно сохранять в дос кодировке это умеет например notepad++.
Для этого в notepad++ перед сохранением файла выбираете Кодировки-кодировки-кириллица-OEM 866, и сохраняете текст. chcp 1251 соответственно надо убрать.

Еще @FILE и @PATH кажется нужно большими буквами писать а то не работает.(по крайней мере в версии для xp)

Для универсальности кода если файлы или папки будут с пробелами можно написать так
forfiles.exe /p «Z:Д0000911processed» /s /d -6 /c «cmd /c del /q /f «@FILE» & rd «@path»»



1



0 / 0 / 0

Регистрация: 05.10.2011

Сообщений: 18

06.10.2011, 09:33

 [ТС]

5

Локально выполнял на viste.
Перенм на win server 2003 тоже не работает и через notepad попробавал.
Прикрепил скриншот.

Миниатюры

Удалить папки, вместе с внутренними файлами, которые были созданы 14 дней назад
 



0



0 / 0 / 0

Регистрация: 05.10.2011

Сообщений: 18

06.10.2011, 09:39

 [ТС]

6

Вот скрин когда через notepad кодировку меняю…

Миниатюры

Удалить папки, вместе с внутренними файлами, которые были созданы 14 дней назад
 



0



atributz

835 / 349 / 12

Регистрация: 04.10.2009

Сообщений: 589

06.10.2011, 09:54

7

Windows Batch file
1
2
3
4
5
6
7
8
@echo off
goto start
:f1
for /D %%i in (%1*) do call :f1 "%%i"
forfiles.exe /p %1 /d -6 /c "cmd /c del /q /f "@FILE" & rd "@FILE""
exit /b
:start
call :f1 "Z:Д0000911processed"

Добавлено через 1 минуту
Сейчас файл приложу в кодировке дос чтоб наверняка.

Добавлено через 6 минут
в notepad++ по другому надо делать.
сначала выставляешь эту кодировку Кодировки-кодировки-кириллица-OEM 866
а там уже пишешь по русски и сохраняешь файл.

Добавлено через 4 минуты
в дос кодировке

Windows Batch file
1
2
3
4
5
6
7
8
@echo off
goto start
:f1
for /D %%i in (%1*) do call :f1 "%%i"
forfiles.exe /p %1 /d -6 /c "cmd /c del /q /f "@FILE" & rd "@FILE""
exit /b
:start
call :f1 "C:„0000911processed"



0



835 / 349 / 12

Регистрация: 04.10.2009

Сообщений: 589

06.10.2011, 09:57

8



0



r18romik

0 / 0 / 0

Регистрация: 05.10.2011

Сообщений: 18

06.10.2011, 11:14

 [ТС]

9

Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
goto start
:f1
for /D %%i in (%1*) do call :f1 "%%i"
forfiles.exe /p  %1 /s /d -6 /c "cmd /c del /q /f  @FILE"
forfiles.exe /p %1 /s /d -6 /c "cmd /c del /q /f "@FILE" & rd "@FILE""
exit /b
:start
call :f1 "Z:„0000911processed"

Получилось так. 1 — удаление файов 2 — удаление пустых папок
Результат:
Скрин1, Скрин2.

На скрине видно, что первое задание вроде выполняется, но по факту папки не удаляются.
Второе задание ругается на папки.

Дерево в каталоге Z:„0000911processed такое: :„0000911processedПапкаПапкаФайл
При удалении папок нужно удалять две папки и один файл.

Миниатюры

Удалить папки, вместе с внутренними файлами, которые были созданы 14 дней назад
 

Удалить папки, вместе с внутренними файлами, которые были созданы 14 дней назад
 



0



835 / 349 / 12

Регистрация: 04.10.2009

Сообщений: 589

06.10.2011, 18:53

10

В конце названия папки слеш уберите его там быть не должно.
И если еще ошибки будут. То уберите из скрипта строчку @echo off и можете выложить скрин, хотя бы один где происходит ошибка и чтобы видно было код перед ней.



0



r18romik

0 / 0 / 0

Регистрация: 05.10.2011

Сообщений: 18

07.10.2011, 14:31

 [ТС]

11

Сдела как Вы сказали. Процесс пошёл, но выдаёт ошибку: Не найдены файлы отвечающие условиям поиска.
for /D %%i in (%1*) do call :f1 «%%i» — не могу разбрать что в этом строке задано? Структуру папок и файлов я уже писал.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
goto start
:f1
for /D %%i in (%1*) do call :f1 "%%i"
forfiles.exe /p  %1 /s /d -6 /c "cmd /c del /q /f  @FILE"
forfiles.exe /p %1 /s /d -6 /c "cmd /c del /q /f "@FILE" & rd "@FILE""
exit /b
:start
call :f1 "Z:„0000911processed"
 
 
Pause

Добавлено через 8 минут
Вот так удалил файлы. Но папки оставил, написал что указанная папка не пуста.
Это потому что по указанному пути (Z:„0000911processed) если Папка и в ней ещё папка в которой находится файл. Файл удалился, а обе папки остались.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
@echo off
goto start
:f1
for /D %%i in (%1*) do call :f1 "%%i"
forfiles.exe /p  %1 /s /d -3 /c "cmd /c del /q /f  @FILE"
forfiles.exe /p %1 /s /d -3 /c "cmd /c del /q /f "@FILE" & rd "@FILE""
exit /b
:start
call :f1 "Z:„0000911processed"
 
 
Pause



0



atributz

835 / 349 / 12

Регистрация: 04.10.2009

Сообщений: 589

07.10.2011, 14:38

12

Вы наверно куда то торопитесь поскольку в вашем коде лишняя строка
forfiles.exe /p %1 /s /d -3 /c «cmd /c del /q /f @FILE»
уберите ее.
должно быть так

Windows Batch file
1
2
3
4
5
6
7
8
@echo off
goto start
:f1
for /D %%i in (%1*) do call :f1 "%%i"
forfiles.exe /p %1 /s /d -3 /c "cmd /c del /q /f "@FILE" & rd "@FILE""
exit /b
:start
call :f1 "Z:„0000911processed"



0



r18romik

0 / 0 / 0

Регистрация: 05.10.2011

Сообщений: 18

07.10.2011, 14:54

 [ТС]

13

Нее она не лишняя
Я вначале этой строкой удаляю файлы в этих папках, а потом уже и сами папки.
Поэтому скрипт выглядит так.
Сейчас происходит забавное: скрипт отрабатывает, строкой (forfiles.exe /p %1 /s /d -5 /c «cmd /c del /q /f @FILE») удаляет все файлы и почему-то меняет дату изменения папки в которой находился файл. Затем при запуске следующей строки (forfiles.exe /p %1 /s /d -3 /c «cmd /c del /q /f «@FILE» & rd «@FILE»») её условия выполнится не могут, так как дата изменения у этой папки уже равно текущей дате.

Вот весь скрипт:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo off
goto start
:f1
for /D %%i in (%1*) do call :f1 "%%i"
forfiles.exe /p  %1 /s /d -5 /c "cmd /c del /q /f  @FILE"
forfiles.exe /p %1 /s /d -5 /c "cmd /c del /q /f "@FILE" & rd "@FILE""
exit /b
:start
call :f1 "Z:„’00004110processed"
 
Pause



0



835 / 349 / 12

Регистрация: 04.10.2009

Сообщений: 589

07.10.2011, 15:06

14

может тогда проще будет удалять файлы по времени а потом все пустые папки?
или пустые папки нужны?



0



sov44

1778 / 760 / 130

Регистрация: 09.04.2011

Сообщений: 1,325

09.10.2011, 20:04

15

Подскажите, почему не передаётся в Echo второй параметр «temporary_downloads» ?

Windows Batch file
1
2
3
4
5
6
7
8
9
SetLocal enabledelayedexpansion
call :OperaDel cache
call :OperaDel temporary_downloads
pause
exit /b 0
 
:OperaDel
Set DirProg=%USERPROFILE%Local SettingsApplication DataOperaopera%1
Echo %DirProg%

Добавлено через 1 час 35 минут
Решил. Как удалить пост?

Добавлено через 2 часа 38 минут
Ещё задачка. Необходимо поправить скрипт, чтобы вывести в Echo имена всех разделов, которые начинаются на КВ

Windows Batch file
1
2
3
4
5
6
7
8
@ECHO OFF
SetLocal enabledelayedexpansion
 
SET UNISTALL=HKLMSoftwareMicrosoftWindowsCurrentVersionUninstall
FOR /f "tokens=7 delims=" %%a IN ('reg query "%UNISTALL%"') DO (
if "%%a"=="KB******" ( Echo %%a )
)
pause



0



atributz

835 / 349 / 12

Регистрация: 04.10.2009

Сообщений: 589

09.10.2011, 23:59

16

вывести в Echo имена всех разделов, которые начинаются на КВ

Windows Batch file
1
2
3
4
5
6
7
8
9
@ECHO OFF
SetLocal enabledelayedexpansion
 
SET UNISTALL=HKLMSoftwareMicrosoftWindowsCurrentVersionUninstall
FOR /f "tokens=7 delims=" %%a IN ('reg query "%UNISTALL%"') DO (
set n=%%a
if "!n:~0,2!"=="KB" echo %%a
)
pause



0



r18romik

0 / 0 / 0

Регистрация: 05.10.2011

Сообщений: 18

11.10.2011, 06:50

 [ТС]

17

Убрал период в строке: forfiles.exe /p %1 /s /c «cmd /c del /q /f «@FILE» & rd «@FILE»»
теперь удаляет все папки, даже если они не пустые. Файлы в них находятся в подпапках.
Он смотрит что в processed папка 01.06.2011 (к примеру) пустая и удаляет её. А в папке 01.06.2011 есть ещё подпапки названные по времени 05-32 и тд, в них хранятся файлы.
В итоге, если поставить период, он не удаляет из-за того, что при удалении файла у папки меняется дата изменения = текущей. А без периода удаляет все папки.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo off
goto start
:f1
for /D %%i in (%1*) do call :f1 "%%i"
forfiles.exe /p  %1 /s /d -10 /c "cmd /c del /q /f  @FILE"
forfiles.exe /p %1 /s /c "cmd /c del /q /f "@FILE" & rd "@FILE""
exit /b
:start
call :f1 "Z:„’00004779processed"
 
Pause

Добавлено через 8 минут
Подскажите как сделать, чтобы в этой строке при удалении проверялись ещё и подпапки и удалялись только в том случае если в подапки тоже пустые.

Windows Batch file
1
forfiles.exe /p %1 /s /c "cmd /c del /q /f "@FILE" & rd "@FILE""

Добавлено через 21 час 45 минут
? Подскажи, пожалуйста.



0



atributz

835 / 349 / 12

Регистрация: 04.10.2009

Сообщений: 589

11.10.2011, 15:00

18

forfiles перебирает одновременно и папки и файлы
ключ d в forfiles сравнивается именно с датой изменения элемента(папки или файла).
Для папок дата изменения совпадает с датой создания и не меняется (по крайней мере в XP в другой системе проверить нужно).

Может подойдет вариант удалить папки созданные n дней назад.
Должно так работать

Windows Batch file
1
forfiles.exe /p "Z:„00004779processed" /s /c "cmd /c rd /s /q /"@FILE/""



0



r18romik

0 / 0 / 0

Регистрация: 05.10.2011

Сообщений: 18

12.10.2011, 07:51

 [ТС]

19

Windows Batch file
1
forfiles.exe /p "Z:„00004779processed" /s /c "cmd /c rd /s /q /"@FILE/""

Не работает. Пишет Не допустимый ключ «05-32» — это папка.
Где она лежит? Вот структура:

Z:„00004779processed12.10.20115-32Файл.zip
Задача: удалиь файл zip — 7 дней и удалить пустые папки 05-32 и 12.10.2011

Миниатюры

Удалить папки, вместе с внутренними файлами, которые были созданы 14 дней назад
 



0



atributz

835 / 349 / 12

Регистрация: 04.10.2009

Сообщений: 589

12.10.2011, 09:17

20

а он сам кавычки ставит.
ну без кавычек значит надо, я ж не знаю у меня потестить негде.

Windows Batch file
1
forfiles.exe /p "Z:„00004779processed" /s /c "cmd /c rd /s /q @FILE"



0



Я работаю с пакетным файлом для удаления заархивированных документов старше 14 дней, и я вызываю файл из процесса автоматизации (Lansa Composer), который считывает код возврата сценария, чтобы узнать, возникла ли проблема. Вот сценарий:

@echo off
@Echo Deleting files older than 14 days...
cd /d C:WindowsSystem32
FORFILES /P "[file path...]IDOC_ARCHIVE" /M *.* /D -14 /C "cmd /c del @file"

Проблема в том, что сценарий возвращает код ошибки и печатает «ОШИБКА: файлы не найдены с указанными критериями поиска», если он не находит файлов для удаления, когда я действительно хочу, чтобы он возвращал ошибку только в случае возникновения проблемы. доступ к каталогу или выполнение команды del и т. д. Есть ли способ заставить этот скрипт подавить ошибку «файлы не найдены», но позволить другим пройти?

После некоторого поиска в Google я попробовал решения на этой странице, но они не будет работать для того, что я хочу, поскольку в первом случае он подавляет ВСЕ ошибки, а во втором передается текст сообщения об ошибке, но фактический код возврата по-прежнему подавляется (это то, что читает процесс автоматизации).

8 ответов

Лучший ответ

Решение состоит в том, чтобы захватить вывод команды FORFILES в цикле FOR, найти в нем строки, начинающиеся с ERROR, и сохранить результат в переменной. Оттуда вы можете использовать директивы IF / ELSE для соответствующей установки errorlevel. Вот код (без протоколирования и комментариев):

cd /d C:WindowsSystem32
SET _CmdResult=NONE
FOR /F "tokens=*" %%a IN ('FORFILES /P "[file path...]IDOC_ARCHIVE" /M *.* /D -14 /C "cmd /c DEL @file" 2^>^&1 ^| FINDSTR ERROR') DO SET _CmdResult=%%a
IF "%_CmdResult%" == "ERROR: No files found with the specified search criteria." ( 
    SET errorlevel=0 
 ) ELSE ( 
    SET errorlevel=1
 )
IF "%_CmdResult%" == "NONE" SET errorlevel=0

Просто убедитесь, что в цикле FOR исключены все символы, такие как >&|.


6

Malcolm
4 Июл 2014 в 02:03

Это должно решить эту проблему:

@echo off
Echo Deleting files older than 14 days...
cd /d C:WindowsSystem32
copy /b forfiles.exe "[file path...]IDOC_ARCHIVE" >nul
FORFILES /P "[file path...]IDOC_ARCHIVE" /M *.* /D -14 /C "cmd /c del @file"

Он предоставляет файл старше 14 дней, поэтому он всегда будет удален, а сообщение «Файлы не найдены» не появится. Я выбрал для копирования forfiles.exe, но вы можете использовать любой файл старше 14 дней. Все остальные сообщения об ошибках будут отображаться как обычно.


15

VLL
10 Май 2019 в 15:03

Добавление 2> nul помогло. Спасибо!

Forfiles / p d: todayfiles / d +0 / c «cmd / c echo @path» 2> nul | найти «:» / c

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


10

Hazem Elraffiee
18 Июл 2019 в 13:54

Чтобы надежно повлиять на УРОВЕНЬ ОШИБКИ, вам необходимо выполнить следующую команду, которая гарантированно установит ERRORLEVEL в 0. Я использую сам интерпретатор команд (cmd.exe), чтобы сделать это, как показано в следующем фрагменте:

FORFILES  /M:somefiles /D -14 2>nul | cmd /c ""

Надеюсь, это кому-то поможет.


6

Nigel
24 Окт 2013 в 14:17

Могу я добавить скромный вклад в эту уже ценную ветку. Я обнаружил, что другие решения могут избавиться от фактического текста ошибки, но игнорируют% ERRORLEVEL%, который сигнализирует об ошибке в моем приложении. И я законно хочу% ERRORLEVEL%, если это не ошибка «Файлы не найдены».

Некоторые примеры:

Специальная отладка и устранение ошибки:

forfiles /p "[file path...]IDOC_ARCHIVE" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&ECHO found error||echo found success

Использование единственной строки для возврата ERRORLEVEL успеха или неудачи:

forfiles /p "[file path...]IDOC_ARCHIVE" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&EXIT /B 1||EXIT /B 0

Использование единственной строки для поддержания уровня ERRORLEVEL равным нулю для успеха в контексте пакетного файла среди другого кода (ver> nul сбрасывает ERRORLEVEL):

forfiles /p "[file path...]IDOC_ARCHIVE" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&ECHO found error||ver > nul

На этапе задания CmdExec агента SQL Server я остановился на следующем. Я не знаю, ошибка ли это, но CmdExec на шаге распознает только первую строку кода:

cmd /e:on /c "forfiles /p "C:SQLADMINMAINTREPORTSSQL2" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&EXIT 1||EXIT 0"&exit %errorlevel%


4

Sting
8 Апр 2015 в 16:17

Это легко решается одним лайнером. Просто добавьте это в свою команду forfiles:

2>&1 | find /v /i "ERROR: No files found with the specified search criteria."

Так вы получите:

FORFILES /P "[file path...]IDOC_ARCHIVE" /M *.* /D -14 /C "cmd /c del @file" 2>&1 | find /v /i "ERROR: No files found with the specified search criteria."

Не отображается только указанное сообщение об ошибке. Все остальные сообщения есть.

Вот как это работает:

  • 2>&1 используется для отправки STDERR в то же место, куда мы отправляем STDOUT.
  • | find /v /i направляет вывод из forfiles, чтобы найти где /v означает НЕ содержащий указанную строку, а /i означает регистронезависимый


4

Christiaan Westerbeek
27 Июн 2014 в 11:08

Попробуйте добавить после скрипта

2>Nul 

Примере

SET Days=14

FORFILES /S /M *.* /D -%Days% /C "CMD /C DEL @file" 2>Nul

Надеюсь, это поможет.


1

Siya Matsakarn
4 Июл 2019 в 08:11

У меня была такая же проблема при попытке удалить дубликаты в ежегодных резервных копиях на моем внешнем жестком диске. Ни одно из решений, найденных при поиске в Интернете (добавление @path, исключение cmd /c в параметре команды), не помогло мне. Система, спрашивающая «Вы уверены …», подсказала мне следующее решение: использовать параметр /q. Результат стирает файлы 2015 в моем каталоге 2016:

forfiles /p G:YearlyBUMine16-12-29IMeMineDocuments /s /c "cmd /c del @path @file /q"  /d -1100


0

Stephan
22 Янв 2019 в 17:38

Подскажите, пожалуйста, по работе планировщика в редакции Home&Biesness

На ПК пользователя подключен сетевой диск (буква М) на котором лежат файловые базы 1С

В 1С прописаны базы: M:Base1CИмя_базы

На диске С этого же ПК создана папка Script1C, в которой лежит скрипт по резервному копированию баз 1С на отдельный диск этого же ПК (буква Е)

Пользователь не имеет админских прав на ПК. Сам ПК в рабочей группе.

Я настроил ПК на самостоятельное включение в 23:00.

По админской учетной записью настроил планировщик для запуска скрипта из папки C:Script1C в 23:10

Сам скрипт, если его руками запустить, работает и делает бэкапы без проблем.

После создания задания, в планировщике нажал кнопку «Выполнить» скрипт запустил с черным окном командной строки. Соответственно планировщик скрипт в планировщике работает.

Сегодня с утра прихожу к ПК пользователя, смотрю бэкапы на Е, их нет.

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

В планировщике стоит, чтобы использовал учетную запись — Администратор

В чем я ошибся при настройке?

Спасибо!

Понравилась статья? Поделить с друзьями:
  • Ошибка не найдены файлы конфигурации
  • Ошибка не найдено соответствующее видеоустройство
  • Ошибка не найдена лицензия на сервер 1с предприятие
  • Ошибка не найдено программное обеспечение
  • Ошибка не найдена конфигурация виджета