Показать полную графическую версию : [решено] удаление части строки
Привет Алл!
Вопрос детский, наверное. )
Есть файл, который формируется ежедневно. в нем такие строки
users:
name=Vasia Pupkin
name=Yulia Ivanova
name=Sidor Pavlov
как средствами винды удалять в файле слово "name="
если не трудно пример кода
Примерно так:@Echo Off
:: Обрабатываемый файл
Set file=e:\Temp\list 1.txt
:: Образец строки подлежащей удалению (без знака равно)
Set srt=name
(For /F "usebackq tokens=1* delims==" %%i In ("%file%") Do (If "%%i"=="%srt%" (Echo %%j) Else (If "%%j"=="" (Echo %%i) Else Echo %%i=%%j)))>test.txt
Copy test.txt "%file%" /Y>Nul
Del test.txt>Nul
Примерно так »
если изменить запрос, к примеру, на set str=nam - то работать не будет, подскажите, как сделать полноценный поиск и удаление подстроки
пример кода основанного на этом, для того, чтобы было видно что пытаюсь сделать:
@ECHO OFF
CHCP 1251
:: Обрабатываемый файл
SET file=test.txt
SET ftmp=%file%.tmp
SET srt=|CD
DIR /b /s /a:d > %file%
(for /F "usebackq tokens=1* delims==" %%i in ("%file%") do (if "%%i"=="%srt%" (echo %%j) else (If "%%j"=="" (echo %%i) else echo %%i=%%j)))>%ftmp%
copy %ftmp% "%file%" /Y>nul
del %ftmp%>nul
SET "file=test.txt"
SET "ftmp=%file%.tmp"
SET "srt=|CD"
и что это?
вообще бессмысленное действие обрамлять переменную со значениями в кавычки
вообще бессмысленное действие обрамлять переменную со значениями в кавычки »
Это не так.
Это не так. »
допустим, но это не на что не повлияло, как лишнее из файла не удалялось, так и не удаляется
Ну, так делайте по-своему, посмотрим, что из этого выйдет. »
повторюсь, ваш совет - не помог, даже если оно и не бессмысленно
хотя в большинстве языков программирования в кавычки помещают значение, а не "переменная=значение"
~Cache~, язык пакетных файлов — не «язык программирования».
Пример своего кода Вы привели. Теперь приведите образец файла, упаковав его в архив.
Пример своего кода Вы привели. Теперь приведите образец файла, упаковав его в архив. »
прошу прощения, но переспрошу, вам нужен результат работы скрипта? т.к. сам скрипт создает данный файл командой DIR /b /s /a:d > %file%
~Cache~, а где Вы видели, чтобы в выводе команды "dir" была строка "|CD"? »
вывод команды DIR из директории c:\Program Files - дает следующее:
c:\Program Files\Common Files
c:\Program Files\ConEmu
c:\Program Files\DVD Maker
c:\Program Files\Ext2Fsd
соответственно вывод CD из директории c:\Program Files = c:\Program Files
или вы считаете, что запись SET srt=|CD подразумевает присвоение переменной srt фразы "|CD" а не присвоение переменной str значения от выполнения команды CD ?
специально проверил:
SET srt=|CD
echo %srt%
вывод: c:\Program Files
т.к. сам скрипт создает данный файл командой DIR /b /s /a:d > %file% »
Значит, я не совсем понял логику работы пакетного файла.
или вы считаете, что запись SET srt=|CD подразумевает присвоение переменной srt фразы "|CD" а не присвоение переменной str значения от выполнения команды CD ? »
Ни то, ни другое. Это попытка передать команде «CD», выводящей текущий каталог (именно поэтому Вы и видите:
вывод: c:\Program Files »
), пустой вывод команды «SET srt=». В результате такого перенаправления команда «SET srt=» не отрабатывает.
вывод: c:\Program Files »
), пустой вывод команды «SET srt=». В результате такого перенаправления команда «SET srt=» не отрабатывает. »
допустим, я не правильно использовал перенаправление
тогда, как присвоить переменной str значениие вывода команды cd?
вы так же не обратили внимание на мой 1 пост, там было сказано об ошибке/фиче того скрипта, который тут когда-то был решен, т.е. если поменять значение переменной str c name на nam - то в файле не будет удалена часть строки соответствующая значению переменной, что видимо и мешает в моей интерпретации скрипта
тогда, как присвоить переменной str значениие вывода команды cd? »
А не надо присваивать значение вывода (и почему «str», было ж «srt»?). Достаточно:
set srt=%CD%
вы так же не обратили внимание на мой 1 пост, там было сказано… »
Там было вообще непонятно — зачем «SET srt=|CD». Не очень понятно и теперь. Опишите словами, что именно Вам нужно получить в целом.
(и почему «str», было ж «srt»?) »
опечатка при написании поста
Там было вообще непонятно — зачем «SET srt=|CD». Не очень понятно и теперь. Опишите словами, что именно Вам нужно получить в целом. »
обращая внимание на первый пост я говорил не о «SET srt=|CD»
а о том, что если в том примере, который тут был изначально, (про name=Yulia Ivanova и т.д.) заменить строку (сократить ее) - то работать код перестает т.к. знак равенства находится в самом цикле
и соответственно,«SET srt=|CD» не работает и мой пример, если к примеру поменять «SET srt=|CD» на «SET srt=C:\Prog» или на «SET srt=Files» - надеюсь так понятней о чем я
я чутка разобрался, как работает данный цикл, он не ищет переменную %srt% - как я считал изначально, он разбивает строку по знаку равно и сравнивает левую часть со значением переменной %srt%
в результате, я использовал не подходящий мне скрипт (был бы коммент о принципе работы данного скрипта, не было бы столько не нужных вопросов и уточнений - была бы отдельная тема по конкретной проблеме)
вообще - суть моего скрипта, получить названия директорий и поддиректорий исходя из текущего расположения скрипта (т.е. все директории расположенные в данной папке, а так же вложенные в них), без полных путей
вообще - суть моего скрипта, получить названия директорий и поддиректорий исходя из текущего расположения скрипта (т.е. все директории расположенные в данной папке, а так же вложенные в них), без полных путей »
Пробуйте:
@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFolder=%~dp0
if exist "%sSourceFolder%\." (
for /f "usebackq delims=" %%i in (
`dir /b /s /a:d "%sSourceFolder%\*.*" 2^>nul`
) do (
set sFolder=%%~i
echo !sFolder:%sSourceFolder%=!
)
) else (
echo Can't findsource folder [%sSourceFolder%].
exit /b 1
)
endlocal
exit /b 0
Так? Или от вложенных каталогов нужны только имена, а не относительные пути?
Так? Или от вложенных каталогов нужны только имена, а не относительные пути? »
судя по выводу консоли - то что нужно, хотя вариант с выводом только последнего каталога тоже бы пригодился...
но сразу вопрос, как в таком варианте скрипта вывести результат в файл?
как в таком варианте скрипта вывести результат в файл? »
видимо сам отвечу:
@echo off
setlocal enableextensions enabledelayedexpansion
set fname=test.txt
del %fname% > nul
set sSourceFolder=%~dp0
if exist "%sSourceFolder%\." (
for /f "usebackq delims=" %%i in (
`dir /b /s /a:d "%sSourceFolder%\*.*" 2^>nul`
) do (
set sFolder=%%~i
echo !sFolder:%sSourceFolder%=! >> %fname%
)
) else (
echo Can't findsource folder [%sSourceFolder%].
exit /b 1
)
endlocal
exit /b 0
но сразу вопрос, как в таком варианте скрипта вывести результат в файл? »
Я обычно делаю так:
@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFolder=%~dp0
set sDestFile=Result.txt
if exist "%sSourceFolder%\." (
>"%sDestFile%" (
for /f "usebackq delims=" %%i in (
`dir /b /s /a:d "%sSourceFolder%\*.*" 2^>nul`
) do (
set sFolder=%%~i
echo !sFolder:%sSourceFolder%=!
)
)
) else (
echo Can't findsource folder [%sSourceFolder%].
exit /b 1
)
endlocal
exit /b 0
хотя вариант с выводом только последнего каталога тоже бы пригодился... »
@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFolder=%~dp0
set sDestFile=Result.txt
if exist "%sSourceFolder%\." (
>"%sDestFile%" (
for /f "usebackq delims=" %%i in (
`dir /b /s /a:d "%sSourceFolder%\*.*" 2^>nul`
) do echo %%~nxi
)
) else (
echo Can't findsource folder [%sSourceFolder%].
exit /b 1
)
endlocal
exit /b 0
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.