Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   проверки строки на пробелы (http://forum.oszone.net/showthread.php?t=329478)

vngreez@vk 02-09-2017 12:11 2762042

проверки строки на пробелы
 
Имеется строка %%a
Если строка не пустая (или содержит пробелы и табуляцию), то выполняем действие (скажем :call test), иначе пропускаем.

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

megaloman 02-09-2017 16:36 2762072

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

vngreez@vk 03-09-2017 10:17 2762192

Код:

        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 2762195

vngreez@vk, а где:
Цитата:

Цитата megaloman
и сам файл »

?

megaloman 03-09-2017 10:53 2762200

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 2762303

Так можно определить какая строка строка начинается с пробела а какая пустая
Код:

@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



Время: 03:25.

Время: 03:25.
© OSzone.net 2001-