【问题标题】:Is there way to pass the percentage (%) to routine?有没有办法将百分比(%)传递给常规?
【发布时间】:2011-01-31 17:57:43
【问题描述】:

dos-批处理文件

输入文件有3条记录:

HOW NOW BROWN COW 

JACK AND JILL 

100% JUST YOU & ME 

脚本如下:

@echo off

set infile=e:\file.txt
set outfile=e:\outfile.txt

for /F "tokens=*" %%H in (%infile%) do (
    call :Loop "%%H"
)

exit /b 0

:Loop
    for %%a in (%*) do echo %%~a >> %outfile%
exit /b 0

输出:

E:\>foo2

E:\>type outfile.txt
HOW NOW BROWN COW

JACK AND JILL

100 JUST YOU & ME

角色 % 不见了! 你知道为什么吗?

【问题讨论】:

    标签: batch-file for-loop dos subroutine


    【解决方案1】:

    这是一个特殊字符,如果你把它设为 100%%,它会正确输出为 100%。我想有一些方法可以优雅地处理它,但你可能不得不玩一些。

    编辑:http://www.dostips.com/DtCodeBatchFiles.php 上进行了一些挖掘并发现了 BatchSubstitute.bat

    对此进行了改编,我认为它应该对你有用 - 如果有人完全了解正在发生的事情,我想听听 - 我只有一个模糊的概念:

    @echo off
    SETLOCAL ENABLEEXTENSIONS
    SETLOCAL DISABLEDELAYEDEXPANSION
    
    
    set infile=e:\file.txt
    set outfile=e:\outfile.txt
    
    for /f "tokens=1,* delims=]" %%A in ('"type %infile%|find /n /v """') do (
        set "line=%%B"
        if defined line (
            call set "line=echo.%%line%%" 
            for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X >> %outfile% 
        ) ELSE echo. >> %outfile%
    )
    

    【讨论】:

      【解决方案2】:

      在您的情况下,问题是call :loop "%%H",您不能使用call按值传输内容,因为它可以更改内容,这里删除了%。

      另一种方法是通过引用调用变量call :func myVar
      但由于call 确实很慢,所以最好的方法是直接在循环中执行。

      for循环的另一个问题是感叹号!和插入符号^
      通常它们会被销毁,但您可以通过延迟切换技术避免这种情况。

      set infile=e:\file.txt
      set outfile=e:\outfile.txt
      setlocal DisableDelayedExpansion
      for /f "delims=" %%A in ('"findstr /n ^^ %infile%"') do (
         set "line=%%A"
         setlocal EnableDelayedExpansion
      
         set "line=!line:*:=!"
         (echo(!line!)>>%outfile%
      
         rem CALL :func line
         endlocal
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-27
        • 2021-04-13
        • 2019-08-18
        • 1970-01-01
        相关资源
        最近更新 更多