[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何把字符串中的某一字符全部去除?

有一个字符串列为
00,00,00,00,00,6e,00,76,00,34,00,5f,00,64,00,69,00,73,00,70,00,00,00,00,00
我想把其中的6e开始一直到最后字符的逗号“,”去除,赋给一变量,觉得似乎得用for命令,具体如何做呢?
即让变量cc=6e00760034005f00640069007300700000000000
(如果能加上判断让cc=6e00760034005f006400690073007000——即发现连续的0000就停止最好)



其实源于要在XP SP3中修改一注册表中的键值,是REG_MULTI_SZ类型,共三行,第一行删除,第二行是空行,只保留第三行,我要做的是
1、先导出注册表项数据(完成)
2、转为ANSI编码(完成)
3、定位到那一行(完成)
4、把得到的00,00,00,00,00,6e,00,76,00,34,00,5f,00,64,00,69,00,73,00,70,00,00,00,00,00数据赋值给给变量cc(完成)
5、如何把变量cc的值变成6e00760034005f006400690073007000

[ 本帖最后由 gudou 于 2010-5-2 22:01 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

  1. echo 00,00,00,00,00,6e,00,76,00,34,00,5f,00,64,00,69,00,73,00,70,00,00,00,00,00 | sed "s/,//g;s/^0\+//;s/\([1-9]000\)0\+/\1/"
复制代码

TOP

请问,sed是第三方程序么?能否只用内置命令完成呢?

TOP

sed是第三方程序
等等看别人怎么用内置命令完成吧

TOP

  请把第2步得到的ANSI编码的文本传上来看看。

  “发现连续的0000就停止最好”这一句该如何理解?请用精确的语言描述它的具体含义。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

  1. @echo off
  2. set cc=00,00,0e,60,00,6e,00,76,00,34,00,5f,00,64,00,69,00,73,00,70,00,00,00,00,00
  3. for %%a in (%cc%) do (if /i "%%a"=="6e" set #==)&if defined # call set "n=%%n%%%%a#"
  4. set n=%n:00#00#=%
  5. set n=%n:#=%
  6. echo.%n%&pause
复制代码
  1. @echo off&setlocal enabledelayedexpansion
  2. set cc=00,00,0e,60,00,6e,00,76,00,34,00,5f,00,64,00,69,00,73,00,70,00,00,00,00,00
  3. for %%a in (%cc%) do (if /i "%%a"=="6e" set #==)&if defined # set "n=!n!%%a#"
  4. set n=%n:00#00#=%&set n=!n:#=!
  5. echo.%n%&pause
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-2 19:01 编辑 ]
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

试试看这样行不?
set cc=%cc:,00,00=00@%
for /f "delims=@" %%a in ("6e%cc:*,6e=%") do set cc=%%a
set cc=%cc:,=%

[ 本帖最后由 netbenton 于 2010-5-2 19:38 编辑 ]

TOP

原帖由 hanyeguxing 于 2010-5-2 18:29 发表

for %%a in (%cc%) do (if /i "%%a"=="6e" set #==)&if defined # call set "n=%%n%%%%a#"
set n=%n:00#00#=%
set n=%n:#=%
echo %n%


这条命令OK!3Q!!

就是不知道是什么意思,刚开始学for……连那个set #==是什么都不知道

[ 本帖最后由 gudou 于 2010-5-2 22:11 编辑 ]

TOP

原帖由 namejm 于 2010-5-2 18:25 发表
  请把第2步得到的ANSI编码的文本传上来看看。

  “发现连续的0000就停止最好”这一句该如何理解?请用精确的语言描述它的具体含义。


rem "导出注册表数据到TEMP文件"
REG EXPORT HKLM\SOFTWARE\BeTwin\Workplaces\Host\WP_Hardware\DISPLAY_01 "%temp%\temp.txt">nul
rem "转换ANSI编码,Ue2a.vbs是做好的VBS脚本,用于把temp.txt编码转为ANSI"
ue2a.vbs "%temp%\temp.txt"
rem "提取出HdDeviceKey键项中的部分有用数据"
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in ('findstr "HdDeviceKey" "%temp%\temp.txt"') do set xx=%%a
set xx=!xx:~79,-7!
rem "把有用数据利用起来,修改硬件加速完全、取消屏蔽3D加速功能"
reg add HKLM\SYSTEM\CurrentControlSet\Control\Video\%xx%\0001 /v Acceleration.Level /t reg_dword /d 0 /f
reg add HKLM\SYSTEM\CurrentControlSet\Control\Video\%xx%\0001 /v CapabilityOverride /t reg_dword /d 0 /f
rem "把驱动的BeTwinDD删除,只用原来驱动"
REG EXPORT HKLM\SYSTEM\CurrentControlSet\Control\Video\%xx%\0001 "%temp%\temp.txt">nul
ue2a.vbs "%temp%\temp.txt"
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in ('findstr "00,00,00,00,00,6e" "%temp%\temp.txt"') do set cc=%%a
set cc=!cc:~17!

到这步为止,让变量cc的值为字符串“6e,00,76,00,34,00,5f,00,64,00,69,00,73,00,70,00,00,00,00,00”

本意是想导入这些字符串对应的文本,但发现 reg add 命令导入的不是6e007600……等……晕啊,这样要找把6e007600(或是6e,00,76,00……,这样就不需要用命令把字符串中的“,”删除了)转换成对应字符的命令了……哎

TOP

楼主要提供REG EXPORT HKLM\SOFTWARE\BeTwin\Workplaces\Host\WP_Hardware\DISPLAY_01 "%temp%\temp.txt">nul导出的文本内容,最好上传
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

REG EXPORT HKLM\SOFTWARE\BeTwin\Workplaces\Host\WP_Hardware\DISPLAY_01 "%temp%\temp.txt">nul导出的文本内容


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\BeTwin\Workplaces\Host\WP_Hardware\DISPLAY_01]
"HdClass"="DISPLAY"
"HdProd"="NVIDIA"
"HdDesc"="NVIDIA GeForce 7100 GS"
"HdRegPath"="System\\CurrentControlSet\\Control\\Video\\{0C13BB5B-D0FE-410E-8873-18CFB7FE7B7E}\\0000"
"HdBus"="PCI"
"HdID"="PCI\\VEN_10DE&DEV_016A&SUBSYS_00000000&REV_A1"
"HdMediaType"=dword:00000000
"HdStatus"=hex:00,00,00,00
"HdHIDPath"=""
"HdDeviceKey"="\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Video\\{0C13BB5B-D0FE-410E-8873-18CFB7FE7B7E}\\0000"
"HdDeviceName"="\\Device\\Video1"

[ 本帖最后由 gudou 于 2010-5-3 04:42 编辑 ]

TOP

转为字符后再写入注册表
"6e00760034005f006400690073007000" 转为 "nv4_disp"

TOP

原帖由 terse 于 2010-5-3 10:44 发表
转为字符后再写入注册表
"6e00760034005f006400690073007000" 转为 "nv4_disp"


思路是这样的,但好像没法这样做吧

TOP

回复 13楼 的帖子

terse兄明明已经算出来了,你为什么还说没法这样做呢?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

原帖由 Batcher 于 2010-5-4 18:44 发表
terse兄明明已经算出来了,你为什么还说没法这样做呢?


我的意思是无法在CMD环境中把那种6e00。。。转换为字符nv4_disp吧,之前找到过VBS脚本,但是针对文件的,不会改为直接转换字符串的

TOP

返回列表