Войти

Показать полную графическую версию : [решено] проверка последнего символа переменной %%i


icq99999999
12-11-2014, 16:42
есть такой код

@echo off
for /f "eol=# delims=^: tokens=*" %%i IN (%~dp0%~n0.yml) DO (
rem Здесь нужно проверить последний символ %%i и если этот символ \ то выполнить (goto 1 || goto 2)
)
pause

вот часть содержимого файла %~dp0%~n0.yml

C:\Users\836D~1\AppData\Roaming\1
C:\ProgramData\1\
%ProgramData%\1 2\

Iska
12-11-2014, 17:13
Зачем там «eol=#»? Зачем «delims=^:»?
rem Здесь нужно проверить последний символ %%i и если этот символ \ то »

Можно также использовать строки расширения.
%PATH:~10,5%
расширит действие переменной среды PATH, затем использует только 5 символов, которые начинаются с 11-го символа (пропустив 10) расширенного результата. Если длина не указана, по умолчанию используется оставшееся значение переменной. Если оба значения (длина и число пропускаемых символов) отрицательны, следующим используемым значением будет длина значения переменной среды, добавленной к указанному значению пропуска или указанной длины.
%PATH:~-10%
извлечет последние 10 символов переменной PATH.
%PATH:~0,-2%
извлечет все символы переменной PATH, за исключением 2-х последних.

Georgio
12-11-2014, 18:20
@echo off

for /f "usebackq delims=" %%i in ("%~dpn0.yml") do (
set x=%%i
cmd /v:on /c echo !x!|>nul findstr \\$&& goto 1|| goto 2
)

icq99999999
12-11-2014, 19:46
Код: »
и так

код отлично выполняется если в файле %~dpn0.yml есть 1 строка
C:\ProgramData\1

теперь нужно чтобы определялось много строк
и в зависимости есть ли в конце строки символ \ или нету выполнить (echo в конце строки "%%i" нет знака \) else ( echo в конце строки "%%i" есть знак \)

ну например если содержимое файла %~dpn0.yml будет таким:
C:\Users\836D~1\AppData\Roaming\1
C:\ProgramData\1\
%ProgramData%\1 2\
то должно вывестись в cmd:
в конце строки "C:\Users\836D~1\AppData\Roaming\1" нет знака \
в конце строки "C:\ProgramData\1\" есть знак \
в конце строки "%ProgramData%\1 2\" есть знак \

Georgio
12-11-2014, 20:23
@echo off

chcp 1251>nul
for /f "usebackq delims=" %%i in ("%~dpn0.yml") do (
set x=%%i
cmd /v:on /c echo !x!|>nul findstr \\$&& (
for /f "delims=" %%j in ("в конце строки "%%i" есть знак \") do (
chcp 866>nul
echo %%j
)
)|| (
for /f "delims=" %%j in ("в конце строки "%%i" нет знака \") do (
chcp 866>nul
echo %%j
)
)
)

pause>nul
exit /b




© OSzone.net 2001-2012