在文件cmd中的字符操作



这是file.txt

hello
hai

我想创建一个程序来读取这个文件。然后用下一个字母替换每一个字母。保持所有数字和其他符号完整。

所以file。txt会变成

ifmmp
ibj

current已经尝试读取每个n,然后读取行中的每个字符,但是回显它们会导致它在不同的行中即

for /f "delims=" %%i in ('^<%path% findstr /n "^"') do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:*:=!"
set "num=-1"
:loop
set /a num=num+1
call set "name2=%%line:~%num%,1%%"
if defined name2 (
rem set /a name2+=1 this statement wont work
    echo %name2%
goto :loop )

)

但是我得到的输出是

echo is off
e
l
l
o

任何想法?

set /a命令只能处理数字,您可以试试:

<>之前@echo off&setlocal设置"阿尔法= abcdefghijklmnopqrstuvwxyza"设置"test=hello hai"设置/a num=0:循环调用集"char=%%test:~%num%,1%%"如果没有定义char goto:eof调用集"alf1=%%alfa:*%char%=%%"如果"%char%" neq " " echo %alf1:~0,1%设置/a num+=1goto:循环之前

. .输出:

<>之前我f米米p我bj

这是一个ROT13批处理文件-你所描述的是ROT1翻译。也许这将为你工作,或者给你的想法,你可以修改它。

@echo off
:: by aacini
:: program works as a filter, that is, it read lines from keyboard (stdin) and send output to screen (stdout). "type filetext.txt|rot13.bat" or "rot13.bat < filetext.txt"
:: with d benham update
@echo off
:: simple rot-13 conversion filter program
setlocal disableDelayedExpansion
set lower=abcdefghijklmnopqrstuvwxyz
set upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
for /l %%a in (0,1,25) do (
  set /a "rot13=(%%a+13)%%26"
  setlocal enableDelayedExpansion
  for %%b in (!rot13!) do for /f "tokens=1-4" %%A in (
    "!lower:~%%a,1! !lower:~%%b,1! !upper:~%%a,1! !upper:~%%b,1!"
  ) do (
    endlocal
    set "lower%%A=%%B"
    set "upper%%C=%%D"
  )
)
for /f "delims=" %%a in ('findstr /n "^"') do (
  set "line=%%a"
  setlocal enableDelayedExpansion
  set "line=!line:*:=!"
  set output=
  if defined line (
    set /a len=0
    for /l %%b in (12,-1,0) do (
      set /a "len|=1<<%%b"
      for %%c in (!len!) do if "!line:~%%c,1!" equ "" set /a "len&=~1<<%%b"
    )
    for /l %%b in (0,1,!len!) do (
      set "char=!line:~%%b,1!"
      if defined lower!char! for /f delims^=^ eol^= %%c in ("!char!") do (
        if "!lower:%%c=%%c!" neq "!lower!" (
          set "char=!upper%%c!"
        ) else set "char=!lower%%c!"
      )
      set "output=!output!!char!"
    )
  )
  echo(!output!
  endlocal
)

最新更新