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

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

Ветеран


Contributor


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

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


Цитата Alexander_88:
подкаталоги скрипт обрабатывает? »
Обрабатывает. Но тут сработал баг Xcopy.
У Вас есть, например, "C:\OneDrive\work\CONTENT" и там нет файла "fileslink.txt".
XCopy при этом не хочет искать этот файл в подпапках.
Если бы файл там был - прекрасно ищет.
Ситуация еще интереснее: если в маске файла есть подстановочный знак, например: "fileslink*.txt", то всё прекрасно ищется.
Учел этот баг, вот рабочая версия
Код: Выделить весь код
@Echo Off
cls
rem                  Сумма    Папка                      Маска   Список исключений если есть
	Call :Count "NTotal1" "C:\OneDrive\work\CONTENT" "*.vbs" ""\Dir21\" "\Dir11\""
	Echo +++ NTotal(*.vbs)=%NTotal1% &Echo.

	Call :Count "NTotal2" "C:\OneDrive\work\CONTENT" "Я21090916.bat" ""\Dir21\" "\Dir11\1.bat" "2001""
	Echo +++ NTotal(Я21090916.bat)=%NTotal2% &Echo.

	Set /A NTotal=%NTotal1%+%NTotal2%
	Echo === NTotal=%NTotal%
pause
Exit /B

:Count
	Set /A %~1=0
	>~Exclude.tmp (For %%m In (%~4) Do Echo %%~m)

	Set Comm="Xcopy /L /E /EXCLUDE:~Exclude.tmp "%~2\%~3?" "%Tmp%\" | findstr.exe /I /R /C:"^%~3$""
	Echo %3 |>nul 2>&1 FindStr /C:"*" /C:"?" &&Set Comm="Xcopy /L /E /EXCLUDE:~Exclude.tmp "%~2\%~3" "%Tmp%\" | findstr.exe /I /C:":""

	For /F "usebackq delims=" %%f In (`%Comm%`) Do (
		Set /A NF=0
		For /F "usebackq tokens=1* delims=:" %%i In (`FindStr /R /N /C:".*" "%%f"`) Do Set /A NF=%%i
		Call Echo %%NF%% = %%f
		Call Set /A %~1+=%%NF%%
	)
	Del ~Exclude.tmp	
Exit /B
Здесь для примера я в одном батнике обработал две маски с выводом статистики по каждой. Работает как с маской файла, так и с точным именем.

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


Последний раз редактировалось megaloman, 29-10-2021 в 15:11.

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

Отправлено: 14:51, 29-10-2021 | #9