Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


xxx_RedDevil_xxx, Мне не нравится Ваш код как по постановке, так и по исполнению.
Цитата xxx_RedDevil_xxx:
Есть директория "Source", в эту папку каждый день сохраняются обработанные txt файлы »
То есть у Вас там копятся уйма файлов, которые Вы все при обработке просматриваете в For. Это затратно. Поэтому Xcopy, как Вы его применили, не вариант: однозначно нужен Move. А если хочется иметь копии всех пришедших файлов - флаг в руки: копируйте всё что пришло в Source в другую папку - тут уж нужен Xcopy /D. И, возможно, лучше их в дальнейшем заархивировать с удалением исходных.
И, по стилю, надежнее делать не, например:
set GLOBAL_PATH=E:\_Auto_Export_AF_DB_\Scripts\SQL_Check_Healthy
а
set "GLOBAL_PATH=E:\_Auto_Export_AF_DB_\Scripts\SQL_Check_Healthy"
это позволит избежать ошибок, если присутствуют конечные незаметные на экране конечные пробелы.
Не очень корректно использованы строки поиска в FindStr, так как в строке поиска "Sqlcmd: Error:" присутствует пробел.
Вот вариант:
Код: Выделить весь код
@Echo Off
cls
	Set "GLOBAL_PATH=Z:\_Auto_Export_AF_DB_\Scripts\SQL_Check_Healthy"
	Set "SOURCE_PATH=%GLOBAL_PATH%\Source"
	Set "RECIPIENT_PATH=%GLOBAL_PATH%\Recipient"
	Set "ERROR_PATH=%GLOBAL_PATH%\Error"
	Set "Backup_PATH=%GLOBAL_PATH%\Backup"
	Set "Mask=*.txt"
	Set KeyErr=/C:"Sqlcmd: Error:" /C:";_DELETE_WELL"

	If Not Exist "%SOURCE_PATH%\" (Echo !!! Folder "%SOURCE_PATH%" not found &Pause &Exit /B 2)
	2>nul (Md "%ERROR_PATH%" &Md "%RECIPIENT_PATH%")
	
	>nul 2>&1 Xcopy /Y /D "%SOURCE_PATH%\%Mask%" "%Backup_PATH%\" 
	For %%f In ("%SOURCE_PATH%\%Mask%") Do (
		>nul FindStr %KeyErr% "%%f" ||>nul Move /Y "%%f" "%RECIPIENT_PATH%\" 
		If Exist "%%f" >nul FindStr %KeyErr% "%%f" &&>nul Move /Y "%%f" "%ERROR_PATH%\" 
	)
pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 28-06-2022 в 15:35.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:30, 28-06-2022 | #12