Dou*_*tes 3 trim batch-file find
我之前的问题是从文本文件中提取多行,现在工作正常,但它仍然需要一些改进来修剪前导和尾随(棘手的部分)空格/制表符空间以及通过Stackoverflow搜索我找到了很多答案并让我结合起来我最后的批处理脚本,但是从所有人把它放在一起它可能不是那么正确.
Details.txt(源文件)
line not needed, Copy and help with these command prompt:
line not needed:
(whitespace)(whitespace)some text not needed Copy "c:\.." a b c(white space)
line not needed:
line not needed, Copy and help with these command prompt:
(whitespace)Copy "d:\.." a c c(tab space)
line not needed
(tab space)(tab space)Copy "e:\.." a a c(whitespace)
line not needed
Run Code Online (Sandbox Code Playgroud)
op.txt(输出文件)
Copy "c:\.." a b c
Copy "d:\.." a c c
Copy "e:\.." a a c
Run Code Online (Sandbox Code Playgroud)
让我们看看第一个批处理脚本.(没有修剪引线和轨迹空间)
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET source="details.txt"
IF EXIST %source% (
FIND /i "copy " <%source% |FIND "\" >op.txt
) ELSE (
Exit
)
Run Code Online (Sandbox Code Playgroud)
组合脚本和尾迹空间的组合脚本给了我两个输出(不是很大).但是,如果我们可以在输出和代码中缩短它,那将是很好的.
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET source="details.txt"
IF EXIST %source% (
FIND /i "copy " <%source% |FIND "\" >op.txt
>op2.txt (
FOR /f "delims=" %%A IN (op.txt) DO (
SET "ln=%%A"
SET str=!ln:*Copy=Copy!
FOR /l %%b IN (1,1,31) DO (
IF "!str:~-1!"==" " SET str=!str:~0,-1!
IF "!str:~-1!"==" " SET str=!str:~0,-1!
)
ECHO !str!
)
)
) ELSE (
Exit
)
Run Code Online (Sandbox Code Playgroud)
它实际上适用于我的大多数源文件,但我确信这可能编码不好.所以我想要在某些方面改进这个批处理脚本,比如输出或者更短/更简单的版本.
谢谢,foxidrive开始并帮助解决我的第一个问题.
David的更新版本(现在所有输出)
@ECHO OFF
SETLOCAL
SET "sourceFile=details.txt"
SET "outputFile=opDavid.txt"
@ECHO OFF > "%outputFile%"
IF EXIST "%sourceFile%" FOR /f "delims=" %%A IN ('FIND /i "copy " ^<%sourceFile% ^|FIND "\"') DO CALL :Trim %%A >>%outputFile%
ENDLOCAL
EXIT /b 0
:Trim
ECHO(%*
EXIT /b 0
Run Code Online (Sandbox Code Playgroud)
对不起我的英文,它像我的编码一样糟糕
该Trim例程通过使用该call命令修剪任何前导和尾随空格来工作.
@ECHO OFF
SETLOCAL
SET "source=details.txt"
SET "output=op.txt"
@echo off > "%output%"
IF EXIST "%source%" FOR /f "delims=" %%A in ('FIND /i "copy " ^<%source% ^|FIND "\"') do call :Trim %%A >> "%output%"
ENDLOCAL
EXIT /b 0
:Trim
echo(%*
EXIT /b 0
Run Code Online (Sandbox Code Playgroud)
| < > &除非在引号内或正确转义,否则会导致脚本崩溃^.^ 将被除去字符串,除非在引号内,因为它是转义字符除非它本身被转义.%即使在引号内也将从字符串中删除,因为它是变量char,除非它本身被转义%%.请注意,大多数这些限制都可以处理,但它需要多行代码,然后可能仍然存在一些限制. 请参阅我的FindAndReplace.bat概念证明,了解它将需要什么.
引号围绕变量,值set "var=value"可以提供特殊的字符保护,而无需在值本身中加引号.
这可以防止变量具有引号并且在引号中的情况.以下将失败,因为
set var="value with spaces"
if "%var%"="value with spaces"
:: this becomes
if ""value with spaces""="value with spaces"
Run Code Online (Sandbox Code Playgroud)
ENDLOCAL从SETLOCAL命令关闭范围,因此,清除对环境所做的所有更改.请参阅本参考
| 归档时间: |
|
| 查看次数: |
3187 次 |
| 最近记录: |