gpt4 book ai didi

string - 在子字符串之后批量修剪文本文件中的行 - REM Trim with Expansion

转载 作者:可可西里 更新时间:2023-11-01 10:03:01 25 4
gpt4 key购买 nike

我正在使用批处理文件(开放使用 VBS 和 PS1 文件)运行 Windows 10 专业版,并且我有一个由软件自动导出的文本文件,如下所示:

Sub_Group691_FE7IP11_2017-12-12.sldasm_bin/parts/Loft-Project.sldasm_bin/parts/Loft-Project...
Sub_Group691_FE7IP12_2017-12-12.sldasm_bin/parts/Loft-Project.sldasm_bin/parts/Loft-Project...
Sub_Group691_FE7IP13_2017-12-12.sldasm_bin/parts/Loft-Project.sldasm_bin/parts/Loft-Project...

每一行在“...”之后继续指定子部分,并且可能包含“毒”字符。 Sub_Group 部分是从文件名中提取的,也可以包含“毒”字符。

我想要做的是仅导出每行开头的文件名,直到并包括第一个文件扩展名,在本例中为“.sldasm”。 .sldasm 第一个实例右边的所有内容都应该被修剪。

到目前为止,我通过研究 Stackoverflow 拼凑的是:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "inputfile=C:\Scratch\ASMExport.txt"
SET "outputfile=C:\Scratch\InputFiles.txt"
(
FOR /f "usebackqdelims=" %%a IN ("%inputfile%") DO (
SET "currentline=%%a"
ECHO("!currentline:.sldasm=.sldasm & rem "!"
)
)>"%outputfile%"

GOTO :EOF

我的问题在于“rem”行,它似乎没有按预期工作,因为它在 FOR 循环中或因为需要启用延迟扩展。它似乎将“& rem”解析为文本,这看起来是因为延迟扩展的工作方式。我从上面几行得到的是:

SubGroup691_FE7IP11_2017-12-12.sldasm" & rem "/bin/parts/Loft-Project.sldasm" & rem ""
SubGroup691_FE7IP12_2017-12-12.sldasm" & rem "/bin/parts/Loft-Project.sldasm" & rem ""
SubGroup691_FE7IP13_2017-12-12.sldasm" & rem "/bin/parts/Loft-Project.sldasm" & rem ""

我可以在循环外使用相同的行并且没有像这样的 ENABLEDELAYEDEXPANSION:

@ECHO OFF
SETLOCAL
SET "inputstring=Sub_Group691_FE7IP11_2017-12-12.sldasm_bin/parts/Loft-Project.sldasm_bin/parts/Loft-Project"
SET "outputstring=%inputstring:.sldasm=.sldasm & rem "%"
echo %outputstring%

那个输出会给我我正在寻找的东西:

Sub_Group691_FE7IP11_2017-12-12.sldasm

在搜索中,我开始认为 rem 不能这样使用,我必须转向使用伪造分隔符的标记分隔符循环。

我会满足于让它工作,而不是通过努力正确命名文件来担心文件名中的“毒”字符。

感谢您的帮助!

最佳答案

向右截断字符串的 & rem 方法不能用于 delayed expansion (!),它依赖于正常/立即扩展(%)。这是因为立即扩展是在命令(如 rem)被识别之前完成的,但是延迟扩展发生在之后,所以永远不会执行 rem 命令。

但是,您可以在循环中 replace每个 .sldasm 都被禁止使用的字符(如 |)分割,然后用 for /F loop 分割字符串,像这样:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

set "InputFile=C:\Scratch\ASMExport.txt"
set "OutputFile=C:\Scratch\InputFiles.txt"
set "Extension=.sdlasm"

> "%OutputFile%" (
for /F usebackq^ delims^=^ eol^= %%A in ("%InputFile%") do (
set "CurrentLine=%%A"
setlocal EnableDelayedExpansion
set "CurrentLine=!CurrentLine:%Extension%=|!"
for /F "delims=|" %%B in ("!CurrentLine!") do (
endlocal
echo(%%B
setlocal EnableDelayedExpansion
)
endlocal
)
)

endlocal
exit /B

延迟扩展已切换,以便在启用时不会扩展 for 变量,以避免感叹号丢失或出现问题。

关于string - 在子字符串之后批量修剪文本文件中的行 - REM Trim with Expansion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47788829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com