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

[文本处理] 怎样把BAT批量延迟影响的叹号没有了的字符串给还原回来?

  1. SET "curPath=%CD%"
  2. SET "aFolder=adlint\"
  3. SET "var1=/usr/include"
  4. SET "var2=#include"
  5. SET "var3=!curPath:\=/!"
  6. SET "var3=!var3!/copy/usr/include"
  7. SET "var4=common\interface\include"
  8. ......
  9. IF EXIST "!curPath!\tmpchk.txt" (
  10. FOR /F %%A IN ('FINDSTR .* "!curPath!\tmpchk.txt"') DO (
  11.   ECHO %%A
  12.   FOR %%i IN ("%%A") DO (
  13.    CALL :SHOW %%i
  14.    SET "cPath=%%~dpi"
  15.   )
  16.   COPY /Y "%%A" "!curPath!\copy">NUL
  17.   IF EXIST "!curPath!\tmp.c" (DEL /F /S /Q "!curPath!\tmp.c">NUL)
  18.   FOR /F "tokens=1* delims=:" %%i IN ('FINDSTR /N .* "%%A"') DO (
  19.    SET "str1=%%j"
  20.    IF DEFINED str1 (
  21.     IF /I "!str1:~0,8!" EQU "!var2!" (
  22.      CALL SET "str2=%%str1:!!var1!!=%%"
  23.      IF NOT "!str1!" EQU "!str2!" (CALL SET "str1=%%str1:!var1!=!var3!%%")
  24.      ECHO;!str1!>>"!curPath!\tmp.c"
  25.     ) ELSE (ECHO;%%j>>"!curPath!\tmp.c")
  26.    ) ELSE (ECHO.>>"!curPath!\tmp.c")
  27.   )
  28.   REN "!curPath!\tmp.c" !cName!
  29.   MOVE /Y "!curPath!\!cName!" !cPath!
  30. )
  31. )
  32. :SHOW
  33. SET cName=%~nx1
复制代码
上面这段话是一个比较完整的段落,批处理文件最开始有
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION这两句,
因为变量延迟,中间的30行那句 ECHO;!str1!>>"!curPath!\tmp.c" 变量str1里面有叹号的时候叹号全没有了,哪位大侠指导一下?

30行的那句有问题,有谁给解答下啊?

TOP

变量延迟开启的时机不对
目测局部修改不可能达到要求,还不如重新来过

TOP

回复 3# apang


能指导一下for语句里这个变量延迟怎么用吗?

TOP

回复 4# wheat611


    以 "最大限度 原样输出" 为关键字搜索论坛

TOP

求助版主啊~在吗?for语句里面怎么写延迟变量?

TOP

类似这样开启,关闭。自己改改。。。。
诚心求助,请把代码贴全,或说明完整要求.
  1. @echo off
  2. SET "curPath=%CD%"
  3. SET "aFolder=adlint\"
  4. SET "var1=/usr/include"
  5. SET "var2=#include"
  6. SET "var3=%curPath:\=/%"
  7. SET "var3=%var3%/copy/usr/include"
  8. SET "var4=common\interface\include"
  9. IF EXIST "%curPath%\tmpchk.txt" (
  10.   FOR /F %%A IN (tmpchk.txt) DO (
  11.      ECHO,%%A
  12.      COPY /Y "%%A" "%curPath%\copy">NUL
  13.      (FOR /F "tokens=1* delims=:" %%i IN ('FINDSTR /N .* "%%A"') DO (
  14.         SET "str1=%%j"
  15.         setlocal enabledelayedexpansion
  16.         IF DEFINED str1 (
  17.            IF /I "!str1:~0,8!" EQU "%var2%" (
  18.               IF "!str1!" NEQ "!str1:%var1%=!" echo,!str1:%var1%=%var3%!
  19.            ) ELSE ECHO;%%j
  20.         ) ELSE ECHO,
  21.         endlocal
  22.      ))>tmp.c
  23.      move /y "tmp.c" "%%a"
  24.   )
  25. )
复制代码
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 7# xxpinqz


    大侠,原文是这样的,我试了改改,还是不对~79行输出叹号还是没有
  1.     @ECHO OFF
  2.     SETLOCAL ENABLEDELAYEDEXPANSION
  3.     SET "curPath=%CD%"
  4.     SET "aFolder=adlint\"
  5.     SET "var1=/usr/include"
  6.     SET "var2=#include"
  7.     SET "var3=!curPath:\=/!"
  8.     SET "var3=!var3!/copy/usr/include"
  9.     SET "var4=common\interface\include"
  10.     SET "HEXE=%1"
  11.     IF "!HEXE!" EQU "" (
  12.     ECHO Hidemaru is searching...
  13.     FOR %%i IN ("C:\Program Files") DO (
  14.       FOR /F "delims=" %%B IN ('DIR /S /B %%i\Hidemaru.exe') DO (
  15.        IF EXIST "%%B" (
  16.         SET "HEXE=%%B"
  17.         GOTO START
  18.        )
  19.       )
  20.     )
  21.     )
  22.     :START
  23.     SET "HEXE=%HEXE:"=%"
  24.     IF NOT EXIST "log.txt" (
  25.       ECHO 【log.txt】is none!
  26.       PAUSE&&EXIT
  27.     )
  28.     :CCHECK
  29.     ECHO.
  30.     IF EXIST "!curPath!\tmpchk.txt" (DEL /F /S /Q "!curPath!\tmpchk.txt">NUL)
  31.     FOR /F %%A IN ('FINDSTR .* "!curPath!\log.txt"') DO (
  32.     CD /D %%A
  33.     FOR /R %%i IN (*.c) DO (
  34.     "!HEXE!" /h /x"!curPath!\cmd\MakeNoBom.mac" /a"%%i"
  35.       FOR /F "tokens=1* delims=:" %%A IN ('FINDSTR /N .* "%%i"') DO (
  36.        SET "str1=%%B"
  37.        IF NOT "!str1!" EQU "" (
  38.         IF /I "!str1:~0,8!" EQU "!var2!" (
  39.          CALL SET "str2=%%str1:!!var1!!=%%"
  40.          IF NOT "!str1!" EQU "!str2!" (ECHO %%i>>"!curPath!\tmpchk.txt")
  41.         )
  42.        )
  43.       )
  44.     )
  45.     )
  46.     IF EXIST "!curPath!\tmpchk.txt" (
  47.     FOR /F %%A IN ('FINDSTR .* "!curPath!\tmpchk.txt"') DO (
  48.       ECHO %%A
  49.       REM C file path and name is written.
  50.       FOR %%i IN ("%%A") DO (
  51.        CALL :SHOW %%i
  52.        SET "cPath=%%~dpi"
  53.       )
  54.       REM rollback at last.
  55.       COPY /Y "%%A" "!curPath!\copy">NUL
  56.       IF EXIST "!curPath!\tmp.c" (DEL /F /S /Q "!curPath!\tmp.c">NUL)
  57.       REM change the path
  58.       FOR /F "tokens=1* delims=:" %%i IN ('FINDSTR /N .* "%%A"') DO (
  59.        SET "str1=%%j"
  60.        IF DEFINED str1 (
  61.         IF /I "!str1:~0,8!" EQU "!var2!" (
  62.          CALL SET "str2=%%str1:!!var1!!=%%"
  63.          IF NOT "!str1!" EQU "!str2!" (CALL SET "str1=%%str1:!var1!=!var3!%%")
  64.          ECHO;!str1!>>"!curPath!\tmp.c"
  65.         ) ELSE (ECHO;%%j>>"!curPath!\tmp.c")
  66.        ) ELSE (ECHO.>>"!curPath!\tmp.c")
  67.       )
  68.       REM cut file
  69.       REN "!curPath!\tmp.c" !cName!
  70.       MOVE /Y "!curPath!\!cName!" !cPath!
  71.     )
  72.     )
  73.     :SHOW
  74.     SET cName=%~nx1
复制代码

TOP

回复 8# wheat611

这看的真累。。。,都不知道能精简掉多少呢,说下详细要求重写一个估计还更简单。

你试着这样改下:
57行-92行按我上面的改
52-53插入一行endlocal
46-47插入一行setlocal enabledelayedexpansion
44行上面的!号全改为%号
去掉第二行的setlocal enabledelayedexpansion

自己备份文件测试下。

更详细帮助论坛搜索下“变量延迟”,你有这基础,随便看几个帖子就懂了
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

返回列表