3

入力テキストを変更し、それらを、a=1などの対応する数値に変更するバッチファイルを作成しようとしています。b=2c=3

@echo off

set /p text=

echo :: %text% ::
echo Is this the expected text? //user can manually typo check
pause
cls

for /f delims=: %%i in ("%text%") do ( 
[something that changes the letters into numbers & store in variable]
)

::do stuff to numbers
4

2 に答える 2

4

これは、cmd スクリプト言語の連想配列で実行できます。

@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION
SET "text=This is my zero text example"
SET "alfa=0abcdefghijklmnopqrstuvwxyz"
FOR /l %%x IN (1,1,26) DO SET "$!alfa:~%%x,1!=%%x"
SET /a count=0
:loop
SET "char=!text:~%count%,1!"
SET "code=!$%char%!
SET /a count+=1
IF DEFINED char SET "line=!line!%code% "&GOTO :loop
ECHO %text%
ECHO %line%

出力:

This is my zero text example
20 8 9 19  9 19  13 25  26 5 18 15  20 5 24 20  5 24 1 13 16 12 5
于 2013-08-22T10:41:23.193 に答える
2

Endoro の結果を取得するためのはるかに効率的な方法を次に示します。わずか 26 回の反復で任意の長さのテキストをエンコードします。

@echo off
setlocal enableDelayedExpansion
set "text=This is my zero text example"
set "code=!text!"
set "chars=0abcdefghijklmnopqrstuvwxyz"
for /l %%N in (1 1 26) do for /f %%C in ("!chars:~%%N,1!") do set "code=!code:%%C=%%N !"
echo !text!
echo !code!

ただし、どちらのソリューションも大文字と小文字を区別できないことに注意してください。さらに、私の単純な置換アルゴリズムは、入力で数字をサポートするように拡張するのが難しいでしょう。

CHARLIB.BAT というバッチ文字列処理ルーチンのライブラリを作成したときのことです。ルーチンの 1 つは、文字を ASCII コードに効率的に変換します。ライブラリの開発は、新しい関数: :chr、:asc、:asciiMapで文書化されています。最終的なコードはhttps://sites.google.com/site/dbenhamfilesからダウンロードできます。

また、ASCII コードをより効率的に処理するバッチ マクロのライブラリも開発しました。バッチ マクロで ASCII コードと文字を変換します。バッチ マクロは、環境変数に格納されているバッチ コードに引数を渡す特殊な手法です。CALL コマンドの比較的遅いプロセスを完全に回避します。私たちのグループは、DosTips でこの手法を開発しました。

于 2013-08-22T16:54:13.370 に答える