gpt4 book ai didi

batch-file - 批处理文件以使用特定行文本文件中的文本重命名目录中的文本文件,除非行为空白

转载 作者:行者123 更新时间:2023-12-03 08:50:27 27 4
gpt4 key购买 nike

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
cd "C:\Documents and Settings\John\Desktop\New\Interest\f2"
Pushd "C:\Documents and Settings\John\Desktop\New\Interest\f2"
Set Line#=26
Set /A LOfs=24 -1, Len=34 - LOfs
For %%A in (*.txt) do For /F "tokens=1* delims=:" %%B in (
'Findstr /N ".*" "%%A" ^|Findstr "^%Line#%:"'
) do if %errorlevel% == 0 Set "Line=%%C"&Ren "%%~fA" "!Line:~%LOfs%,%Len%! - %%A!""
Popd

在上面,我试图更改目录中某个位置带有文本的文件的文件名。

如果第26行为空白,则不执行任何操作,并且不要更改文件名。

我在某个地方出错了,正在转圈。

有人可以帮忙吗?

谢谢。

最佳答案

您没有说明脚本如何失败,但是我可以看到一些潜在的问题。我还看到了可能的简化。

  • 您当然不需要CDPUSHD
  • 我摆脱了数字变量,并在实际代码中包括了数字文字。您可以根据需要恢复为变量。
  • 您不需要外部FOR循环。当在文件名中使用通配符时,FINDSTR可以搜索多个文件,然后它将包含文件名,并在输出中包含:。因此,如果添加/N选项,输出将具有filename:line#:text的形式。然后,您可以调整第二个FINDSTR以仅返回正确的行号。
  • 忽略空白行是不够的。仅当第23个字符之后至少有一个有效的文件名字符时,您的重命名才有效。文件名不能包含:*?/\<>|。 (我可能错过了一些)。我调整了FOR /F delims和FINDSTR搜索以进行补偿。
  • FOR变量扩展(如%%A)如果包含!且启用了延迟扩展,则会破坏值。 !是文件名中的有效字符。因此,必须在循环内打开和关闭延迟的扩展。

  • 我相信以下内容将满足您的需求。下面的代码将简单地重命名命令。一旦给出正确的结果,请在 ECHO之前删除 ren
    @echo off
    setlocal disableDelayedExpansion
    pushd "C:\Documents and Settings\John\Desktop\New\Interest\f2"
    for /f "tokens=1,3 delims=:*?\/<>|" %%A in (
    'findstr /n "^" "*.txt" ^| findstr "^[^:]*:26:.......................[^:*?\\/<>|]"'
    ) do (
    set "old=%%A"
    set "line=%%B"
    setlocal enableDelayedExpansion
    ECHO ren "!old!" "!line:~23,11! - !old!"
    endlocal
    )
    popd

    关于batch-file - 批处理文件以使用特定行文本文件中的文本重命名目录中的文本文件,除非行为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42390804/

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