吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 489|回复: 14
上一主题 下一主题
收起左侧

[资源求助] 帮忙写一个bat批量处理文件

[复制链接]
跳转到指定楼层
楼主
是苏三啊 发表于 2024-5-5 11:10 回帖奖励
100吾爱币
比如我一个文件夹内的文件命名方式为前面一串数值或者中英文加数值中间空格隔开(一个或者多个空格隔开)然后在跟上一串数值最后跟上中文或者英文结尾,比如(12345678912 258tiao、tx5442255456      369条),我现在想搞一个bat直接一点就能算出空格后面数值,中文或者英文前面的数值的总和,如题目中两个文件我现在想要计算的是(258+369的和),然后将结果放入一个TXT文档里面,文档能命名跟答案一下就最好了省的点进去,文档进去能看见谁与谁相加等于多少最好,如上面的两个文件名我点进生成的TXT中能看见(258+369=627)这样就最好了,这样我想计算哪个文件夹下的数值我就直接把这个bat放在哪个文件夹下面一点就可以了,求大佬解答

最佳答案

查看完整内容

AI写的我猜测应该都是错的,未测试过直接复制过来的。 顺手写了个,需要powershell 正常非精简版系统win7以上应该都自带 [mw_shl_code=asm,true] $s=@() dir|%{if($_.BaseName -match "(?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
平淡最真 发表于 2024-5-5 11:10
本帖最后由 平淡最真 于 2024-5-5 16:00 编辑

AI写的我猜测应该都是错的,未测试过直接复制过来的。
顺手写了个,需要powershell   正常非精简版系统win7以上应该都自带

[Asm] 纯文本查看 复制代码
<# :
@echo off
powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0' |Out-String|Invoke-Expression"
pause
#>
$s=@()
dir|%{if($_.BaseName -match "(?<=\s+)\d+"){$s+=$Matches[0]}}
$ss=[string]::Join("+",$s)+"="+([string]::Join("+",$s)|iex)
$ss|Out-File -FilePath "$ss.txt"


3#
 楼主| 是苏三啊 发表于 2024-5-5 11:11 |楼主
4#
Arcticlyc 发表于 2024-5-5 12:06
是苏三啊 发表于 2024-5-5 11:11
不知道大佬们能明白我想表达的意思吗

我都看懂了,大佬应该能看懂
5#
devilpanama 发表于 2024-5-5 12:14
ai1:
[Python] 纯文本查看 复制代码
您想要一个批处理文件(.bat)来实现以下功能:

1. 遍历指定文件夹中的文件名,提取空格后面的数值及中文或英文前面的数值。
2. 计算每个文件名中提取的两个数值的总和,并将结果输出到一个TXT文档。
3. 文档的命名按照两个数值的总和来命名,文档内容包含所有计算结果。

以下是一个示例的批处理文件内容,您可以创建一个名为 `sum_calculator.bat` 的批处理文件,并将以下内容复制粘贴到文件中:

```bat
@echo off

setlocal enabledelayedexpansion

set "dir=%~dp0"
set "output=%dir%result.txt"
del "%output%" 2>nul

FOR /F "tokens=1,2 delims= " %%G IN ('dir /b "%dir%"') DO (
for /f "tokens=1,2" %%A in ("%%H") do (
set "num1=%%A"
set "num2=%%G"
)

set /a sum=!num1!+!num2!
echo !num1!+!num2!=!sum! >> "%output%"
)

endlocal
```

请将以上代码复制到一个新的文本文件中,将该文件保存为 `sum_calculator.bat`。然后将这个 `.bat` 文件放在你想要进行计算的文件夹内,并运行它。

运行后,该批处理文件将遍历当前文件夹下的所有文件名,提取空格后面的数值及中文或英文前面的数值,计算总和,将结果输出到一个名为 `result.txt` 的TXT文档中。文档中会被记录每个文件名中提取的两个数值以及它们的总和。

希望以上信息对您有帮助。如果您在使用过程中有任何问题或其他需求,请随时告诉我。


ai2:
[Python] 纯文本查看 复制代码
要实现您所描述的功能,您可以编写一个简单的批处理(.bat)脚本。这个脚本会遍历指定文件夹中的所有文件,使用正则表达式来匹配文件名中的数值,然后计算这些数值的总和,并将结果保存到一个文本文件中。以下是实现该功能的批处理脚本的一个示例:

@echo off
setlocal enabledelayedexpansion

:: 设置文件夹路径,这里假设脚本和文件夹在同一目录下
set "folder_path=%~dp0"

:: 初始化数值总和为0
set /a "sum=0"

:: 用于存储结果的变量
set "result="

:: 遍历文件夹中的所有文件
for %%f in ("%folder_path%*.*") do (
    for /f "tokens=* delims= " %%n in ("%%f") do (
        :: 使用正则表达式匹配文件名中的数值
        for /f "tokens=1* delims= " %%a in ("%%n") do (
            if defined %%b (
                :: 如果存在空格,则%%a是前面的部分,%%b是数值部分
                set /a "sum+=%%b"
                set "result=!result! %%b"
            )
        )
    )
)

:: 计算完成,输出结果
echo 文件名中的数值总和是: !sum!
echo 参与计算的数值: !result!

:: 将结果保存到文本文件中
set "output_file=%folder_path%SumResult.txt"
echo 文件名中的数值总和是: !sum! > "!output_file!"
echo 参与计算的数值: !result! >> "!output_file!"
echo. >> "!output_file!"
echo !result!+!sum!=!sum! >> "!output_file!"

:: 结束脚本
endlocal
请注意,这个脚本是基于您提供的文件命名规则和需求编写的,但实际的文件名匹配逻辑可能需要根据实际情况进行调整。特别是正则表达式的使用,可能需要根据文件名的具体格式进行定制。

将上述代码保存为 .bat 文件,然后将其放置在您想要计算文件名数值总和的文件夹中。双击运行该脚本,它会生成一个名为 SumResult.txt 的文本文件,其中包含了所有匹配到的数值及其总和。

这个脚本使用了 for 循环和 set 命令来处理数值的累加和输出。enabledelayedexpansion 是必要的,因为它允许在 for 循环中修改变量的值。此外,脚本使用了 for /f 命令来分割文件名,并尝试匹配数值部分。

请根据您的实际需求调整脚本中的文件夹路径和正则表达式匹配逻辑。如果文件名的格式有所不同,您可能需要调整正则表达式的模式以正确匹配和提取数值。


ai3
[Asm] 纯文本查看 复制代码
要实现您的需求,我们需要编写一个批处理(.bat)脚本来遍历指定文件夹中的所有文件,解析文件名中的数值,并将它们加总。以下是一个可能的解决方案:

batch
@echo off  
setlocal EnableDelayedExpansion  
set "folder=."  :: 默认使用当前文件夹,也可以修改为其他路径,例如 set "folder=C:\path\to\your\folder"  
set "sum=0"  
set "output_file=sum_result.txt"  
  
:: 清空或创建输出文件  
if exist "%output_file%" del "%output_file%"  
  
:: 遍历文件夹中的文件  
for %%F in ("%folder%*") do (  
    set "filename=%%~nxF"  
    set "numbers="  
  
    :: 使用delims选项来分割文件名,保留空格后的数字部分  
    for /f "tokens=1* delims= " %%a in ("!filename!") do (  
        for /f "tokens=* delims=0123456789" %%i in ("%%b") do (  
            set "temp=%%b"  
            :: 去除文件名中的非数字字符,只保留数字  
            :remove_non_digits  
            if not "!temp:~0,1!"==""^  
            if not "!temp:~0,1!"=="0" if not "!temp:~0,1!"=="1" if not "!temp:~0,1!"=="2" if not "!temp:~0,1!"=="3" ^  
            if not "!temp:~0,1!"=="4" if not "!temp:~0,1!"=="5" if not "!temp:~0,1!"=="6" if not "!temp:~0,1!"=="7" ^  
            if not "!temp:~0,1!"=="8" if not "!temp:~0,1!"=="9" (  
                set "temp=!temp:~1!"  
                goto :remove_non_digits  
            )  
            set "numbers=!numbers!+!temp!"  
        )  
    )  
  
    :: 如果找到了数字,则加到总和中(这里假设只有一个数字需要加总)  
    for /f "tokens=2 delims=+" %%n in ("!numbers!") do (  
        set /a "sum+=%%n"  
    )  
)  
  
:: 将结果写入文件  
echo Total sum is !sum! >> "%output_file%"  
  
:: 如果需要,添加详细的加总记录  
for %%F in ("%folder%*") do (  
    set "filename=%%~nxF"  
    set "numbers="  
  
    for /f "tokens=1* delims= " %%a in ("!filename!") do (  
        for /f "tokens=* delims=0123456789" %%i in ("%%b") do (  
            set "temp=%%b"  
            :remove_non_digits  
            if not "!temp:~0,1!"==""^  
            if not "!temp:~0,1!"=="0" if not "!temp:~0,1!"=="1" if not "!temp:~0,1!"=="2" if not "!temp:~0,1!"=="3" ^  
            if not "!temp:~0,1!"=="4" if not "!temp:~0,1!"=="5" if not "!temp:~0,1!"=="6" if not "!temp:~0,1!"=="7" ^  
            if not "!temp:~0,1!"=="8" if not "!temp:~0,1!"=="9" (  
                set "temp=!temp:~1!"  
                goto :remove_non_digits  
            )  
            set "num=!temp!"  
              
            :: 检查是否之前已经处理过这个文件,避免重复  
            if not "!processed:%%F=!"=="!processed!" (  
                echo !num! (from !filename!) >> "%output_file%"  
                set "processed=!processed! %%F"  
            )  
        )  
    )  
)  
  
:: 添加总和的等式到文件末尾  
>> "%output_file%" echo(  
>> "%output_file%" echo(--------------------------  
>> "%output_file%" echo(Total sum is: !sum!  
  
endlocal
注意:这个脚本假设每个文件名中只有一个空格后的数字需要加总。如果有多个数字需要加总,则需要对脚本进行额外的修改。

此外,由于批处理在字符串处理上的能力有限,上面的脚本使用了标签和循环来去除文件名中的非数字字符。这可能会导致性能问题,特别是在处理大量文件时。
6#
zhlong 发表于 2024-5-5 12:37
感觉都是chatgpt生成的
7#
h7867 发表于 2024-5-5 12:41
      这个脚本假定您所描述的文件命名规则是一致的,并且文件名中的数字都是出现在空格之后,以及在中文或英文字符之前的数字是您需要累加的部分。此外,此脚本简单地处理了常见的空格分隔情况,对于多个连续空格,它将视为单个分隔符。

```batch
@echo off
setlocal enabledelayedexpansion

set "totalSum=0"
set "resultFile=result_!random!.txt"

> %resultFile% echo.

for %%f in (*) do (
    set "fileName=%%~nf"
    for /f "tokens=2 delims= " %%a in ("!fileName!") do (
        set /a totalSum+=%%a
        echo Adding %%a to sum
    )
)

echo Total Sum: !totalSum! > %resultFile%
echo Sum saved to %resultFile%

endlocal
```

**注意:**
     - 这个脚本没有直接实现将具体的加数(如“258+369”)及其和(“627”)的详细信息记录在文本文件中,而是仅输出了最终的总和。要实现您的完整要求(即列出所有加数和它们的总和),脚本需要进一步复杂化,因为需要维护一个列表来追踪每个文件名中提取的数字,并在循环结束后再写入到文件中。
- 脚本中的 `result_!random!.txt` 部分是为了每次运行生成不同的结果文件名,避免覆盖之前的计算结果。如果您希望文件名总是固定或者包含特定的总和信息,这需要做额外的调整。

    由于直接实现您的完整需求涉及到更复杂的逻辑,特别是关于如何在文本文件中详细列出每个加数及最终和,这超出了基本批处理脚本的简易范围
8#
yucevip 发表于 2024-5-5 13:11
要实现您的需求,我们可以编写一个批处理(.bat)脚本来遍历指定文件夹中的文件名,提取每个文件名中空格后面的数字,并将这些数字相加。然后,将结果写入一个文本文件中。以下是一个可能的实现方式:

bat
@echo off  
setlocal EnableDelayedExpansion  
set "folder=."  :: 默认为当前文件夹,您可以根据需要修改为其他文件夹路径  
set "sum=0"  
set "output_file=sum_result.txt"  
  
:: 清空输出文件  
if exist "%output_file%" del "%output_file%"  
  
:: 遍历文件夹中的文件  
for %%F in ("%folder%*") do (  
    set "filename=%%~nxF"  
    set "number="  
      
    :: 提取文件名中的数字部分(空格后的第一个连续数字串)  
    for /f "delims=0123456789 tokens=*" %%a in ("!filename!") do (  
        set "rest=%%a"  
        for /f "tokens=1* delims= " %%b in ("!rest!") do (  
            set "token=%%b"  
            for /f "delims=0123456789 tokens=*" %%c in ("!token!") do (  
                if not "!%%c!"=="" (  
                    for /f "delims=0123456789* eol=0" %%d in ("!token!") do (  
                        set "number=!token:*%%d=!"  
                    )  
                )  
            )  
        )  
    )  
      
    :: 如果提取到了数字,则将其添加到总和中  
    if not "!number!"=="" (  
        set /a "sum+=!number!"  
        echo File "%%F": !number! added to sum. >> "%output_file%"  
    )  
)  
  
:: 输出总和到文件  
echo Total sum: %sum% >> "%output_file%"  
  
:: 可选:生成一个带结果的TXT文件,文件名包含总和  
set "result_file=sum_%sum%.txt"  
type "%output_file%" > "%result_file%"  
del "%output_file%"  
  
echo Result has been saved to %result_file%.  
endlocal
请注意,这个脚本有一些假设和限制:

它假设文件名中的数字串是在最后一个空格之后,并且该数字串之前没有非数字字符。
它假设数字串不包含前导零(例如,它不会正确处理像 "007" 这样的数字串,因为它会被视为 "7")。
它假设文件夹路径中不包含空格或特殊字符(如果包含,则需要使用引号)。
它只计算并输出每个文件的数字,但您也可以根据需要修改它以仅输出总和或添加其他信息。
将上述脚本保存为 .bat 文件,并将其放在您想要处理的文件夹中。运行脚本后,它将创建一个名为 sum_result.txt(以及一个包含总和的文件名,如 sum_627.txt)的文件,其中包含每个文件的数字和总和。
9#
 楼主| 是苏三啊 发表于 2024-5-5 17:49 |楼主
平淡最真 发表于 2024-5-5 15:58
AI写的我猜测应该都是错的,未测试过直接复制过来的。
顺手写了个,需要powershell   正常非精简版系统win ...

ai的我都试过1了不行答案都是错的你这些的这个目前可行,但是如果说成千上百个不知道能不能计算得过来,还有文件命名他是连多少加多少全搞进去,这样数值一多会不会直接出错了,我试一下
10#
 楼主| 是苏三啊 发表于 2024-5-5 18:40 |楼主
平淡最真 发表于 2024-5-5 15:58
AI写的我猜测应该都是错的,未测试过直接复制过来的。
顺手写了个,需要powershell   正常非精简版系统win ...

Out-File : 指定的路径或文件名太长,或者两者都太长。完全限定文件名必须少于 260 个字符,并且目录名必须少于 248 个字符。
所在位置 行:9 字符: 5
+ $ss|Out-File -FilePath "$ss.txt"
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (:) [Out-File], PathTooLongException
    + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand

请按任意键继续. . .

这就是命名太长导致的错误吧,我文件有成百上千个
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-12 20:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表