Войти

Показать полную графическую версию : проверки строки на пробелы


vngreez@vk
02-09-2017, 12:11
Имеется строка %%a
Если строка не пустая (или содержит пробелы и табуляцию), то выполняем действие (скажем :call test), иначе пропускаем.

Мой код заключается в построчном чтении файла (for /f), и удаление в указанной строке: файла или папки
Но если присутствует пробелы между строками, то программа ведет себя не так как надо.

megaloman
02-09-2017, 16:36
vngreez@vk, Неплохо бы посмотреть, как Вы считываете строки из файла и сам файл. ИМХО, при считывании в FOR в большинстве случаев пустые строки пропускаются.

vngreez@vk
03-09-2017, 10:17
for /F "tokens=*" %%c in ("!port!\delete.list") do (
if not "%%c"=="" (
if not "%%c"==" " (
for /f "usebackq tokens=*" %%a in ("!port!\delete.list") do (
if exist %work%\rom\%%a (
del "%work%\rom\%%a" /q /s >nul 2>&1
rd "%work%\rom\%%a" /q /s >nul 2>&1
call :log "[-] %%a"
) else ( call :log "[?] not found: %%a" )
)
)
)
)

call :log - вызывает код с записью действий в файл

Iska
03-09-2017, 10:30
vngreez@vk, а где:
и сам файл »
?

megaloman
03-09-2017, 10:53
vngreez@vk, ИМХО, применять здесь вложенный For не имеет смысла, так как if not "%%c"=="" (
if not "%%c"==" " (
в данном контексте выполняется всегда и далее %%с нигде не используется. Предоставьте файл, иначе трудно понять что не так.
Что получается, если вместо всей приведенной конструкции для отладки оставить строку
for /f "usebackq tokens=*" %%a in ("!port!\delete.list") do Echo %%a %work%\rom\%%a
pause Кстати, в имени файла из переменной %%a содержатся пробелы? Тогда надо кавычки:if exist "%work%\rom\%%a"Почему-то ниже Вы их используете.

alpap
03-09-2017, 21:37
Так можно определить какая строка строка начинается с пробела а какая пустая

@echo off
<file.txt (for /f "tokens=1* delims=[]" %%a in ('find /v /n ""') do @call :s "%%b")
pause& exit

:s
echo "%~1"|>nul findstr /rc:"\<[ ]" && (
echo Строка начинается с пробела
) || (
if not "%~1"=="" (<nul set /p="%~1"& echo:) else (echo Строка пустая)
)
exit /b


но в конечном-то итоге согласно вашего условия все проще получается:

@echo off
<file.txt (for /f "tokens=1* delims=[]" %%a in ('find /v /n ""') do @call :s "%%b")
pause& exit

:s
if "%~1"=="" (echo Действий для "%~1" не выполняем) else (echo Выполняем действие для "%~1")
exit /b




© OSzone.net 2001-2012