2010-11-30 1 views
2

Хорошо, поэтому я работал над довольно сложным пакетным файлом, который в основном просит пользователя создать текстовый файл, содержащий 6 (или более) строк текста. Затем он принимает этот файл и изменяет каждый экземпляр каждой буквы на соответствующий номер (например, если первая строка текстового файла говорит «запрограммирована», тогда программа изменит все экземпляры буквы «a» на 1 и «b», в 2 и так далее до тех пор, пока не было все числа было бы затем прочитать «16 18 15 7 18 1 13 1 2 12 5»), и я бы сделать это с помощью следующего сценария:.Как заменить строку на второй строке в текстовом файле с помощью командного файла?

set /p var=< text.txt 
set var=%var:a=1% 
echo.%var% >> text.txt 

Однако только проблема с этим скриптом заключается в том, что он только изменит букву а в первой строке на 1, а не букву «а» в остальной части документа.

Я также попытался расщепить документ в начале программы, так что, когда пользователь набирает текст для первой строки, он отправляет его в отдельный скрытый файл (text1.txt) вместо того, чтобы просто отправлять все строки текст, который пользователь, в один текстовый файл (text.txt)

я так использую это:

set /p line1=type the first line: 
echo %line1% >> text1.txt 
attrib +h text1.txt 
set /p line2=type the second line: 
echo %line2% >> text2.txt 
attrib +h text2.txt 
:: ######################################################################## 
:: Im not going to repeat this 6 times but hopefully you get my point 
:: ######################################################################## 

Теперь проблема с расщеплением линий в отдельные файлы, что было бы в эффективных и чрезвычайно трудоемкий, чтобы изменить все экземпляры каждой буквы на их соответствующие номера и сделать это для каждой строки (или в этой ситуации, файла) что пользователь вводит ... Если бы это помогло, если бы я поставил все это в контексте, вот скрипт для моей программы до сих пор, для индекса «: LOADING», который я использую в настоящее время методом, который я объяснил ранее, когда я разделял строки в файлы.

Код: (Save As «stringparsing.bat»)

@echo off 
title BETA 
cls 
echo. 
echo. 
echo. 
echo  Setting Variables... 
echo  Loading Language Database... 
:: ################################################################################### 
:: CALLING VARIABLE DATABASE CALLING VARIABLE DATABASE CALLING VARIABLE DATABASE 
:: ################################################################################### 
:: An Idea i was thinking of trying was to put a subscript here that calls another 
:: batch file that contains a list of the letters set as variables to their 
:: respective numbers (example: SET a=1, SET b=2, SET c=3) 
:: ----------------------------------------------------------------------------------- 
PING 1.1.1.1 -n 1 -w 3000 >NUL 
goto MAIN 
:MAIN 
set foo=0 
cls 
echo. 
echo. 
echo. 
echo. 
echo   =================================== 
echo    #################################   
echo    #######  Main Menu: ####### 
echo    ################################# 
echo   =================================== 
echo.  
echo. 
echo    1.) Create New Language File... 
echo. 
echo    2.) Load Existing Lanuage File... 
echo. 
echo    3.) Settings... 
echo --------------------------------------------------------- 
SET /p CHOICE= Select a Function: 
IF %CHOICE%== 1 GOTO CREATE 
IF %CHOICE%== 2 GOTO LOAD 
IF %CHOICE%== 3 GOTO SETTINGS 
GOTO MAIN 
:CREATE 
cls 
title Step 1 
echo. 
echo. 
echo. 
echo    echo ============================================================================ 
echo. 
set /p name= please type a name for your new language file: 
echo. 
echo   ================================================================================= 
cls 
echo. 
echo. 
echo. 
echo ============================================================== 
echo ############################################################## 
echo #============================================================# 
echo #               # 
echo # - After you hit enter you will be redirected    # 
echo # to a Live Typer. so anything you type into    # 
echo # it will be sent to %name%.txt.       # 
echo #               # 
echo #               # 
echo # - Next, select load language!        # 
echo #               # 
echo #============================================================# 
echo ############################################################## 
echo ============================================================== 
pause 
goto typer1 
:typer1 
cls 
set /p line1= : 
echo %line1% >> %name%1.txt 
attrib +h %name%1.txt 
cls 
set /p line2= : 
echo %line2% >> %name%2.txt 
attrib +h %name%2.txt 
cls 
set /p line3= : 
echo %line3% >> %name%3.txt 
attrib +h %name%3.txt 
cls 
set /p line4= : 
echo %line4% >> %name%4.txt 
attrib +h %name%4.txt 
cls 
set /p line5= : 
echo %line5% >> %name%5.txt 
attrib +h %name%5.txt 
cls 
set /p line6= : 
echo %line6% >> %name%6.txt 
attrib +h %name%6.txt 
cls 
echo. 
echo. 
echo. 
echo ========================================================== 
echo. 
(
IF EXIST %name%1.txt echo - FIRST LINE CONFIRMED. 
IF EXIST %name%2.txt echo - SECOND LINE CONFIRMED. 
IF EXIST %name%3.txt echo - THIRD LINE CONFIRMED. 
IF EXIST %name%4.txt echo - FOURTH LINE CONFIRMED. 
IF EXIST %name%5.txt echo - FIFTH LINE CONFIRMED. 
IF EXIST %name%6.txt echo - SIXTH LINE CONFIRMED. 
echo %name% > Language_File.txt 
attrib +h Language_File.txt 
set /a foo+ =1 
) 
echo. 
echo ========================================================== 
goto LOAD 
:LOAD 
set /a foo+ =1 
IF %foo%== 2 goto loadexternal 
goto LOAD23 
:loadexternal 
echo. 
echo language file is loading now! 
pause > nul 
cls 
set /p name=<Language_File.txt 
echo. 
echo. 
echo Language_File Loaded! 
pause >nul 
goto LOAD23 
:LOAD23 
cls 
echo. 
echo. 
echo. 
echo. 
echo. 
echo  Encoding Your Language File... Please Wait... 
echo. 
echo. 
echo. 
PING 1.1.1.1 -n 1 -w 3000 >NUL 
:A1 
set /p var=< %name%1.txt 
set var=%var:a=1% 
echo.%var% 
echo %var% > %name%1.txt 
echo. 
echo. 
echo. 
echo   "A" done. 
goto B1 
:B1 
set /p var=< %name%1.txt 
set var=%var:b=2% 
echo.%var% 
echo %var% > %name%1.txt 
echo. 
echo. 
echo. 
echo   "B" done. 
goto C1 
:C1 
set /p var=< %name%1.txt 
set var=%var:c=3% 
echo.%var% 
echo %var% > %name%1.txt 
echo. 
echo. 
echo. 
echo   "C" done. 
goto D1 
:D1 
set /p var=< %name%1.txt 
set var=%var:d=4% 
echo %var% > %name%1.txt 
echo   "D" done. 
goto E1 
:E1 
set /p var=< %name%1.txt 
set var=%var:e=5% 
echo %var% > %name%1.txt 
echo   "E" done. 
goto F1 
:F1 
set /p var=< %name%1.txt 
set var=%var:f=6% 
echo %var% > %name%1.txt 
echo   "F" done. 
pause 
cls 
type %name%.txt 
pause >nul 
goto MAIN 
:END 
cls 
title SHUTTING DOWN... 
echo. 
echo. 
echo. 
echo   Terminating service stream... 
echo. 
echo. 
echo. 
echo. 
echo   Done! Thank you for using this program! 
ping 1.1.1.1 w -n 1 -w 6000 > NUL 
Exit*** 

Если у вас есть решение я бы рад услышать это, потому что я искал высоко и низко для решения этой проблемы, но есть ничего не нашел. Кроме того, если кто-то замечает любые другие ошибки или ошибки в моем скрипте, пожалуйста, не стесняйтесь комментировать!

Заранее благодарен!

PS. Если последний скрипт, который я опубликовал в этом разделе, не вышел правильно, или все было смешано, просто скачайте скрипт по этой ссылке:

[http://home.danieljewison.operaunite.com/f/content/Documents /stringparsing.bat][1]

+0

Вы считаете, что используете современный язык программирования (Python ... Ruby ... что-нибудь действительно)? На самом деле нет веских оснований для использования пакетных файлов на данный момент (... ну, за последние 10 лет действительно). – Gerrat 2010-11-30 04:48:03

+2

ну, если бы я знал что-нибудь о любом из этих языков, ive попробовал делать программы на C++, а у ive были исходные коды для всех, но я не знаю, как их компилировать, потому что все компиляторы там действительно запутывают и попросите у меня столько параметров, и вам нужно скачать soo, чтобы заставить их работать ... но с пакетом вам нужен блокнот: P plus im намного лучше при программировании оболочки/пакета, чем я на любом другом языке (хотя я хотел бы расширить мои знания оболочки, потому что я уверен, что оболочка включает в себя другие части, кроме командных файлов. – daniel11 2010-12-04 01:09:47

ответ

1

Позвольте представить вам мой друг, for loop. Сохраните все строки, введенные пользователем в один файл. Я назову этот файл input.txt. Используйте петлю for с помощью переключателя /f и опцию delims= для прокрутки каждой строки в файле и сохранения строк в переменной %%i. Без delims= он читался только до первого символа пробела.

Для каждой строки, которую он читает, выполните свою замену текста. «Gotcha» с пакетным программированием - это когда вы устанавливаете переменные внутри цикла for, вы должны добавить строку setlocal enabledelayedexpansion в начало вашего файла и использовать ! вместо % для доступа к содержимому переменной.

@echo off 
setlocal enabledelayedexpansion 
for /f "delims=" %%i in (input.txt) do (
echo translating "%%i"... ^<insert fake delay here^> 
set var=%%i 
set var=!var:a=1 ! 
set var=!var:b=2 ! 
set var=!var:c=3 ! 
set var=!var:d=4 ! 
set var=!var:e=5 ! 
set var=!var:f=6 ! 
set var=!var:g=7 ! 
set var=!var:h=8 ! 
set var=!var:i=9 ! 
set var=!var:j=10 ! 
set var=!var:k=11 ! 
set var=!var:l=12 ! 
set var=!var:m=13 ! 
set var=!var:n=14 ! 
set var=!var:o=15 ! 
set var=!var:p=16 ! 
set var=!var:q=17 ! 
set var=!var:r=18 ! 
set var=!var:s=19 ! 
set var=!var:t=20 ! 
set var=!var:u=21 ! 
set var=!var:v=22 ! 
set var=!var:w=23 ! 
set var=!var:x=24 ! 
set var=!var:y=25 ! 
set var=!var:z=26 ! 
echo !var! 
) 

Если input.txt имеет такое содержание:

programable 
this is line 2 
third line 

Тогда результат будет выглядеть следующим образом:

C:\batch>encode.cmd 
translating "programable"... <insert fake delay here> 
16 18 15 7 18 1 13 1 2 12 5 
translating "this is line 2"... <insert fake delay here> 
20 8 9 19 9 19 12 9 14 5 2 
translating "third line"... <insert fake delay here> 
20 8 9 18 4 12 9 14 5 

Как вы можете видеть, я вышел из фальшивой задержки. Мне очень нравятся мои программы. :)

Смежные вопросы