Компьютерный форум 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=264892)

Instant_SR 24-07-2013 17:43 2189896

Вычитание символов из строки и вывод на экран
 
Прошу помощи с реализацией именно *.bat:
Есть конструкция в которой "вращается" счетчик вида:

:loop_len
if not "%papka%"=="" (
set papka=%papka:~1%
set /a n=%n% + 1
goto loop_len
)

Тут все отлично значение %n% верное
Есть вторая конструкция, возвращающая строками, что находится в указанной папке в виде полного адреса к конечному файлу:

for /f "tokens=*" %%i in ('dir /b /s "%papka%"') do (
set find_adr=%%i
echo %find_adr%
)

Есть вариант команды "echo %[строка]:~[число]%" которая отсекает [число] знаков слева у [строка]

Мне нужна помощь в том, чтобы из строки второй конструкции %find_adr% отнять число %n% знаков слева, которые получаются из первой конструкции.

т.е. вида "echo %%find_adr%:~%n%%" но в таком варианте второй символ % распознается, как окончание конструкции... Кто в курсе, как можно обойти такой момент?

Iska 24-07-2013 18:22 2189927

Instant_SR, не совсем понятна глобальная Ваша цель, но используйте «setlocal enableextensions enabledelayedexpansion» в начале пакетного файла и «!find_adr:~%n%!».

Хорошо бы Вы привели полный код Вашего пакетного файла.

Sphinx114 24-07-2013 18:47 2189947

Код:

@echo off
set "papka=C:\folder\"

setlocal
:loop_len
if not "%papka%"=="" (
set papka=%papka:~1%
set /a n+=1
goto loop_len
)
endlocal & set n=%n%

for /f "tokens=*" %%i in ('dir /b /s "%papka%"') do (
set find_adr=%%i
call echo %%find_adr:~%n%%%
)
pause

Альтернативный вариант:
Код:

@echo off
set "papka=C:\folder\"
for /f "delims=" %%i in ('dir /b /s "%papka%"') do (
set find_adr=%%i
call echo %%find_adr:%papka%=%%
)
pause


Instant_SR 25-07-2013 11:18 2190337

Iska, благодарю, я так пытался, но SETLOCAL установлено было не в начале скрипта, а перед входом в :loop_len
кому интересно. вот даю тестовый текст кода от начала и до конца:

@ECHO off
@COLOR 3
@CHCP 866
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
CLS
SET pc=%COMPUTERNAME% && SET path=C:\%COMPUTERNAME%
ECHO "Имя ПК = %pc%" && ECHO "Путь к тестовой папке = %path%"
ECHO "Посчитаем число символов в пути к тестовой папке"
PAUSE
SET /A counter=0
:loop_len
IF NOT "%path%"=="" (
SET path=%path:~1%
SET /A counter=%counter%+1
GOTO loop_len
)
SET path=C:\%COMPUTERNAME%
ECHO Счетчик = %counter%
ECHO "Выведем список файлов в директории %path%"
PAUSE
FOR /F "TOKENS=*" %%i IN ('DIR /B /S "%path%"') DO (
SET result=%%i
ECHO !result:~%counter%!
)
PAUSE

Результат: "result" выводится с 1 "лишним символом" слева так что есть резон "отрезать" на 1 символ больше

Iska 25-07-2013 11:37 2190348

Instant_SR, есть куда более простой способ:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (`dir /a:-d /b /s "c:\%ComputerName%\*.*"`) do (
        echo %%~nxi
)

endlocal
exit /b 0



Время: 18:29.

Время: 18:29.
© OSzone.net 2001-