![Board logo](images/default/logo.gif)
标题: [文本处理] 怎样把BAT批量延迟影响的叹号没有了的字符串给还原回来? [打印本页]
作者: wheat611 时间: 2013-12-16 14:23 标题: 怎样把BAT批量延迟影响的叹号没有了的字符串给还原回来?
- SET "curPath=%CD%"
- SET "aFolder=adlint\"
- SET "var1=/usr/include"
- SET "var2=#include"
- SET "var3=!curPath:\=/!"
- SET "var3=!var3!/copy/usr/include"
- SET "var4=common\interface\include"
-
- ......
-
- IF EXIST "!curPath!\tmpchk.txt" (
- FOR /F %%A IN ('FINDSTR .* "!curPath!\tmpchk.txt"') DO (
- ECHO %%A
-
- FOR %%i IN ("%%A") DO (
- CALL :SHOW %%i
- SET "cPath=%%~dpi"
- )
-
- COPY /Y "%%A" "!curPath!\copy">NUL
-
- IF EXIST "!curPath!\tmp.c" (DEL /F /S /Q "!curPath!\tmp.c">NUL)
-
- FOR /F "tokens=1* delims=:" %%i IN ('FINDSTR /N .* "%%A"') DO (
- SET "str1=%%j"
- IF DEFINED str1 (
- IF /I "!str1:~0,8!" EQU "!var2!" (
- CALL SET "str2=%%str1:!!var1!!=%%"
- IF NOT "!str1!" EQU "!str2!" (CALL SET "str1=%%str1:!var1!=!var3!%%")
- ECHO;!str1!>>"!curPath!\tmp.c"
- ) ELSE (ECHO;%%j>>"!curPath!\tmp.c")
- ) ELSE (ECHO.>>"!curPath!\tmp.c")
- )
-
- REN "!curPath!\tmp.c" !cName!
- MOVE /Y "!curPath!\!cName!" !cPath!
- )
- )
-
- :SHOW
- SET cName=%~nx1
复制代码
上面这段话是一个比较完整的段落,批处理文件最开始有
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION这两句,
因为变量延迟,中间的30行那句 ECHO;!str1!>>"!curPath!\tmp.c" 变量str1里面有叹号的时候叹号全没有了,哪位大侠指导一下?
作者: wheat611 时间: 2013-12-16 15:16
30行的那句有问题,有谁给解答下啊?
作者: apang 时间: 2013-12-16 16:34
变量延迟开启的时机不对
目测局部修改不可能达到要求,还不如重新来过
作者: wheat611 时间: 2013-12-16 17:16
回复 3# apang
能指导一下for语句里这个变量延迟怎么用吗?
作者: apang 时间: 2013-12-16 18:19
回复 4# wheat611
以 "最大限度 原样输出" 为关键字搜索论坛
作者: wheat611 时间: 2013-12-17 13:17
求助版主啊~在吗?for语句里面怎么写延迟变量?
作者: xxpinqz 时间: 2013-12-17 14:29
类似这样开启,关闭。自己改改。。。。
诚心求助,请把代码贴全,或说明完整要求.- @echo off
- SET "curPath=%CD%"
- SET "aFolder=adlint\"
- SET "var1=/usr/include"
- SET "var2=#include"
- SET "var3=%curPath:\=/%"
- SET "var3=%var3%/copy/usr/include"
- SET "var4=common\interface\include"
- IF EXIST "%curPath%\tmpchk.txt" (
- FOR /F %%A IN (tmpchk.txt) DO (
- ECHO,%%A
- COPY /Y "%%A" "%curPath%\copy">NUL
- (FOR /F "tokens=1* delims=:" %%i IN ('FINDSTR /N .* "%%A"') DO (
- SET "str1=%%j"
- setlocal enabledelayedexpansion
- IF DEFINED str1 (
- IF /I "!str1:~0,8!" EQU "%var2%" (
- IF "!str1!" NEQ "!str1:%var1%=!" echo,!str1:%var1%=%var3%!
- ) ELSE ECHO;%%j
- ) ELSE ECHO,
- endlocal
- ))>tmp.c
- move /y "tmp.c" "%%a"
- )
- )
复制代码
作者: wheat611 时间: 2013-12-17 15:39
回复 7# xxpinqz
大侠,原文是这样的,我试了改改,还是不对~79行输出叹号还是没有- @ECHO OFF
- SETLOCAL ENABLEDELAYEDEXPANSION
-
- SET "curPath=%CD%"
- SET "aFolder=adlint\"
- SET "var1=/usr/include"
- SET "var2=#include"
- SET "var3=!curPath:\=/!"
- SET "var3=!var3!/copy/usr/include"
- SET "var4=common\interface\include"
- SET "HEXE=%1"
-
-
- IF "!HEXE!" EQU "" (
- ECHO Hidemaru is searching...
- FOR %%i IN ("C:\Program Files") DO (
- FOR /F "delims=" %%B IN ('DIR /S /B %%i\Hidemaru.exe') DO (
- IF EXIST "%%B" (
- SET "HEXE=%%B"
- GOTO START
- )
- )
- )
- )
-
- :START
- SET "HEXE=%HEXE:"=%"
-
- IF NOT EXIST "log.txt" (
- ECHO 【log.txt】is none!
- PAUSE&&EXIT
- )
-
-
- :CCHECK
- ECHO.
- IF EXIST "!curPath!\tmpchk.txt" (DEL /F /S /Q "!curPath!\tmpchk.txt">NUL)
-
- FOR /F %%A IN ('FINDSTR .* "!curPath!\log.txt"') DO (
- CD /D %%A
-
- FOR /R %%i IN (*.c) DO (
- "!HEXE!" /h /x"!curPath!\cmd\MakeNoBom.mac" /a"%%i"
-
- FOR /F "tokens=1* delims=:" %%A IN ('FINDSTR /N .* "%%i"') DO (
- SET "str1=%%B"
- IF NOT "!str1!" EQU "" (
- IF /I "!str1:~0,8!" EQU "!var2!" (
- CALL SET "str2=%%str1:!!var1!!=%%"
- IF NOT "!str1!" EQU "!str2!" (ECHO %%i>>"!curPath!\tmpchk.txt")
- )
- )
- )
- )
- )
-
- IF EXIST "!curPath!\tmpchk.txt" (
- FOR /F %%A IN ('FINDSTR .* "!curPath!\tmpchk.txt"') DO (
- ECHO %%A
-
- REM C file path and name is written.
- FOR %%i IN ("%%A") DO (
- CALL :SHOW %%i
- SET "cPath=%%~dpi"
- )
-
- REM rollback at last.
- COPY /Y "%%A" "!curPath!\copy">NUL
-
- IF EXIST "!curPath!\tmp.c" (DEL /F /S /Q "!curPath!\tmp.c">NUL)
-
- REM change the path
- FOR /F "tokens=1* delims=:" %%i IN ('FINDSTR /N .* "%%A"') DO (
- SET "str1=%%j"
- IF DEFINED str1 (
- IF /I "!str1:~0,8!" EQU "!var2!" (
- CALL SET "str2=%%str1:!!var1!!=%%"
- IF NOT "!str1!" EQU "!str2!" (CALL SET "str1=%%str1:!var1!=!var3!%%")
- ECHO;!str1!>>"!curPath!\tmp.c"
- ) ELSE (ECHO;%%j>>"!curPath!\tmp.c")
- ) ELSE (ECHO.>>"!curPath!\tmp.c")
- )
-
- REM cut file
- REN "!curPath!\tmp.c" !cName!
- MOVE /Y "!curPath!\!cName!" !cPath!
- )
- )
-
-
- :SHOW
- SET cName=%~nx1
复制代码
作者: xxpinqz 时间: 2013-12-18 00:54
回复 8# wheat611
这看的真累。。。,都不知道能精简掉多少呢,说下详细要求重写一个估计还更简单。
你试着这样改下:
57行-92行按我上面的改
52-53插入一行endlocal
46-47插入一行setlocal enabledelayedexpansion
44行上面的!号全改为%号
去掉第二行的setlocal enabledelayedexpansion
自己备份文件测试下。
更详细帮助论坛搜索下“变量延迟”,你有这基础,随便看几个帖子就懂了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |