吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 684|回复: 13
收起左侧

[其他求助] 帮写一个可以批量读取文件生成特定特征的代码

[复制链接]
欺负老实人么 发表于 2025-3-11 16:20
100吾爱币
本帖最后由 欺负老实人么 于 2025-3-11 16:27 编辑

我举个例子,假如一个文件夹里有SF1.txt、SF7.txt、ST11.txt、SF5.txt、SF8.txt这几个文件,我需要选中可执行的BAT文件,自动读取到这几个文件的全部名字不含后缀,生成代码如下
&ACCESS RVP
&REL 15
&COMMENT HANDLER on external automatic
DEF  CELL ( )
  ;EXT EXAMPLE1 ( )
  ;EXT EXAMPLE2 ( )
  ;EXT EXAMPLE3 ( )
  
  ;FOLD INIT
  DECL CHAR DMY[3]
  DMY[]="---"
  ;ENDFOLD (INIT)
  ;FOLD BASISTECH INI
  GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
  INTERRUPT ON 3
  BAS (#INITMOV,0 )
  ;ENDFOLD (BASISTECH INI)
  ;FOLD CHECK HOME
  $H_POS=XHOME
  IF CHECK_HOME==TRUE THEN
    P00 (#CHK_HOME,#PGNO_GET,DMY[],0 ) ;Testing Home-Position
  ENDIF
  ;ENDFOLD (CHECK HOME)
  ;FOLD PTP HOME  Vel= 100 % DEFAULT;%{PE}%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
  $H_POS=XHOME
  PDAT_ACT=PDEFAULT
  BAS (#PTP_DAT )
  FDAT_ACT=FHOME
  BAS (#FRAMES )
  BAS (#VEL_PTP,100 )
  PTP  XHOME
  ;ENDFOLD
  ;FOLD AUTOEXT INI
  P00 (#INIT_EXT,#PGNO_GET,DMY[],0 ) ; Initialize extern mode
  ;ENDFOLD (AUTOEXT INI)
  LOOP
    P00 (#EXT_PGNO,#PGNO_GET,DMY[],0 )
    SWITCH  PGNO ; Select with Programnumber

    CASE 1
      P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ) ; Reset Progr.No.-Request
      SF1() ; Call User-Program   

    CASE 2
      P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ) ; Reset Progr.No.-Request
      SF7() ; Call User-Program   

    CASE 3
      P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ) ; Reset Progr.No.-Request
      ST11() ; Call User-Program   

    CASE 4
      P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ) ; Reset Progr.No.-Request
      SF5() ; Call User-Program   

    CASE 5
      P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ) ; Reset Progr.No.-Request
      SF8() ; Call User-Program   

   


    DEFAULT
      P00 (#EXT_PGNO,#PGNO_FAULT,DMY[],0 )
    ENDSWITCH
  ENDLOOP
END
[/mw_shl_code] ,根据上述规律,假如我文件夹有许多文件文件名有很多样式,例如PT1-2、PL2-A,请给我生成上述要求中我所需的可执行代码,要求给出的代码执行完最后给我生成一个cell.txt文件即可,代码中只有红色的位置是根据当前文件夹的文件多少而变化,其他的代码不需要变化,文件名字的排序按照名称依次排序即可

最佳答案

查看完整内容

修正后如下: 交给Deepseek处理(deepseek没处理完特殊符号,加了些转义符):根据你的需求,我帮你编写了以下批处理脚本。该脚本会自动读取当前目录下所有文件名(不含后缀),生成符合KUKA机器人编程规范的CELL程序,并自动创建cell.txt文件: ```bat @echo off setlocal enabledelayedexpansion (set output=cell.txt) ( echo ^&ACCESS RVP echo ^&REL 15 echo ^&COMMENT HANDLER on external automatic echo DEF ...

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

Jangs 发表于 2025-3-11 16:20
本帖最后由 Jangs 于 2025-3-12 10:25 编辑

修正后如下:
交给Deepseek处理(deepseek没处理完特殊符号,加了些转义符):根据你的需求,我帮你编写了以下批处理脚本。该脚本会自动读取当前目录下所有文件名(不含后缀),生成符合KUKA机器人编程规范的CELL程序,并自动创建cell.txt文件:

```bat
@echo off
setlocal enabledelayedexpansion

(set output=cell.txt)

(
echo ^&ACCESS RVP
echo ^&REL 15
echo ^&COMMENT HANDLER on external automatic
echo DEF  CELL ^( ^)
echo   ;EXT EXAMPLE1 ^( ^)
echo   ;EXT EXAMPLE2 ^( ^)
echo   ;EXT EXAMPLE3 ^( ^)
echo:
echo   ;FOLD INIT
echo   DECL CHAR DMY[3]
echo   DMY[]="---"
echo   ;ENDFOLD ^(INIT^)
echo   ;FOLD BASISTECH INI
echo   GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ^( ^)
echo   INTERRUPT ON 3
echo   BAS ^(#INITMOV,0 ^)
echo   ;ENDFOLD ^(BASISTECH INI^)
echo   ;FOLD CHECK HOME
echo   $H_POS=XHOME
echo   IF CHECK_HOME==TRUE THEN
echo     P00 ^(#CHK_HOME,#PGNO_GET,DMY[],0 ^) ;Testing Home-Position
echo   ENDIF
echo   ;ENDFOLD ^(CHECK HOME^)
echo   ;FOLD PTP HOME  Vel= 100 %% DEFAULT;%%{PE}%%MKUKATPBASIS,%%CMOVE,%%VPTP,%%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
echo   $H_POS=XHOME
echo   PDAT_ACT=PDEFAULT
echo   BAS ^(#PTP_DAT ^)
echo   FDAT_ACT=FHOME
echo   BAS ^(#FRAMES ^)
echo   BAS ^(#VEL_PTP,100 ^)
echo   PTP  XHOME
echo   ;ENDFOLD
echo   ;FOLD AUTOEXT INI
echo   P00 ^(#INIT_EXT,#PGNO_GET,DMY[],0 ^) ; Initialize extern mode
echo   ;ENDFOLD ^(AUTOEXT INI^)
echo   LOOP
echo     P00 ^(#EXT_PGNO,#PGNO_GET,DMY[],0 ^)
echo     SWITCH  PGNO ; Select with Programnumber
echo:
) >> "%output%"

set count=0
for /f "delims=" %%a in ('dir /b /a-d *.* ^| findstr /v /i "%~nx0 cell.txt"') do (
    set /a count+=1
    set "name=%%~na"
    (echo     CASE !count!
     echo       P00 ^(#EXT_PGNO,#PGNO_ACKN,DMY[],0 ^) ; Reset Progr.No.-Request
     echo       !name!^(^) ; Call User-Program
     echo:
    ) >> "%output%"
)

(
echo     DEFAULT
echo       P00 ^(#EXT_PGNO,#PGNO_FAULT,DMY[],0 ^)
echo     ENDSWITCH
echo   ENDLOOP
echo END
) >> "%output%"

endlocal
```

脚本特性说明:
1. 自动过滤自身脚本和生成的cell.txt文件
2. 支持各种特殊文件名格式(含"-"等特殊字符)
3. 按文件名自然排序生成CASE序号
4. 动态生成红色可变部分(CASE语句)
5. 固定模板部分保持不变
6. 最终生成标准的cell.txt文件

使用方法:
1. 将上述代码保存为"generate.bat"
2. 放入需要处理的文件夹
3. 双击运行,会自动生成cell.txt
4. 生成的cell.txt可直接用于KUKA机器人系统

注意事项:
1. 文件名不要包含特殊字符"!"和"^"
2. 文件排序按Windows资源管理器默认排序规则
3. 生成的CASE序号与文件排序一一对应
4. 支持任意扩展名的文件,自动去除后缀处理

效果示例(当存在PT1-2.txt和PL2-A.bat时):
```kuka
    CASE 1
      P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ) ; Reset Progr.No.-Request
      PT1-2() ; Call User-Program

    CASE 2
      P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ) ; Reset Progr.No.-Request
      PL2-A() ; Call User-Program
```
天天上天庭 发表于 2025-3-11 16:39
[Asm] 纯文本查看 复制代码
import os

def generate_code(file_names):
    template = """
&ACCESS RVP
&REL 15
&COMMENT HANDLER on external automatic
DEF  CELL ( )
  ;EXT EXAMPLE1 ( )
  ;EXT EXAMPLE2 ( )
  ;EXT EXAMPLE3 ( )
  
  ;FOLD INIT
  DECL CHAR DMY[3]
  DMY[]="---"
  ;ENDFOLD (INIT)
  ;FOLD BASISTECH INI
  GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
  INTERRUPT ON 3
  BAS (#INITMOV,0 )
  ;ENDFOLD (BASISTECH INI)
  ;FOLD CHECK HOME
  $H_POS=XHOME
  IF CHECK_HOME==TRUE THEN
    P00 (#CHK_HOME,#PGNO_GET,DMY[],0 ) ;Testing Home-Position
  ENDIF
  ;ENDFOLD (CHECK HOME)
  ;FOLD PTP HOME  Vel= 100 % DEFAULT;%{PE}%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
  $H_POS=XHOME
  PDAT_ACT=PDEFAULT
  BAS (#PTP_DAT )
  FDAT_ACT=FHOME
  BAS (#FRAMES )
  BAS (#VEL_PTP,100 )
  PTP  XHOME
  ;ENDFOLD
  ;FOLD AUTOEXT INI
  P00 (#INIT_EXT,#PGNO_GET,DMY[],0 ) ; Initialize extern mode
  ;ENDFOLD (AUTOEXT INI)
  LOOP
    P00 (#EXT_PGNO,#PGNO_GET,DMY[],0 )
    SWITCH  PGNO ; Select with Programnumber
{}
    DEFAULT
      P00 (#EXT_PGNO,#PGNO_FAULT,DMY[],0 )
    ENDSWITCH
  ENDLOOP
END
"""

    case_template = """
    CASE {case_num}
      P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ) ; Reset Progr.No.-Request
      {file_name}() ; Call User-Program   
"""
    
    cases = []
    for i, file_name in enumerate(file_names, start=1):
        cases.append(case_template.format(case_num=i, file_name=file_name))
    
    cases_block = "\n".join(cases)
    return template.format(cases_block)

def main():
    # 设置文件夹路径
    folder_path = 'your_folder_path_here'  # 替换为你的文件夹路径
    output_file = 'cell.txt'

    # 获取文件夹中所有 .txt 文件的名字(不含后缀)
    file_names = [os.path.splitext(f)[0] for f in os.listdir(folder_path) if f.endswith('.txt')]
    file_names.sort()  # 按名称排序

    # 生成代码
    code = generate_code(file_names)

    # 写入 cell.txt 文件
    with open(output_file, 'w') as f:
        f.write(code)

    print(f"Code has been written to {output_file}")

if __name__ == "__main__":
    main()


这个是使用通义灵码生成的。
使用说明:
1.设置文件夹路径:将 folder_path 变量设置为包含你要处理的 .txt 文件的文件夹路径。
2.运行脚本:确保你有一个 Python 环境,并且可以运行此脚本。运行后,它会生成一个名为 cell.txt 的文件,其中包含你需要的代码。
3.检查输出:脚本会在当前目录下生成 cell.txt 文件,你可以打开它来查看生成的代码。
注意事项:
1.确保文件夹路径正确,并且文件夹中确实存在 .txt 文件。
2.如果文件名中有特殊字符或空格,请确保这些字符不会影响生成的代码逻辑。
3.如果有其他特定需求或格式要求,请根据需要调整模板和代码逻辑。
4.通过上述步骤,你可以轻松生成符合你要求的代码文件。
 楼主| 欺负老实人么 发表于 2025-3-11 16:47
天天上天庭 发表于 2025-3-11 16:39
[mw_shl_code=asm,true]import os

def generate_code(file_names):

我是想生成一个BAT可执行文件,因为设备有限,我复制到bat文件里面,也是无法生成,生成文件的目录就在当前文件夹里就可以
天天上天庭 发表于 2025-3-11 16:52
欺负老实人么 发表于 2025-3-11 16:47
我是想生成一个BAT可执行文件,因为设备有限,我复制到bat文件里面,也是无法生成,生成文件的目录就在当 ...

抱歉 抱歉, 需求我没有看明白, 我还以为是重新生成红字里面的代码就直接丢给AI了。
 楼主| 欺负老实人么 发表于 2025-3-11 16:53
天天上天庭 发表于 2025-3-11 16:52
抱歉 抱歉, 需求我没有看明白, 我还以为是重新生成红字里面的代码就直接丢给AI了。

还是谢谢你的热心回复
头像被屏蔽
TheTree 发表于 2025-3-11 16:56
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 欺负老实人么 发表于 2025-3-11 17:02
TheTree 发表于 2025-3-11 16:56
根据您的要求,以下是自动生成KRL代码的BAT脚本。它会读取当前目录下所有.txt文件(排除自身),按文件名排 ...

谢谢诶你的回复,生成的不是很对,当前文件夹里的文件都是.dat后缀的,我改后缀识别后,只生成了我要求中的红色部分,没有生成黑色的部分,生成的CASE部分用换行割开就行,挨着不易识别
天天上天庭 发表于 2025-3-11 17:07
欺负老实人么 发表于 2025-3-11 16:53
还是谢谢你的热心回复

再给我一个机会, 看看这个。
[Asm] 纯文本查看 复制代码
@echo off
setlocal enabledelayedexpansion

REM 设置文件夹路径
set "folder_path=your_folder_path_here"  REM 替换为你的文件夹路径
set "output_file=cell.txt"

REM 清空输出文件
> "%output_file%" echo.

REM 获取文件夹中所有 .txt 文件的名字(不含后缀),并排序
set count=0
for /f "tokens=*" %%f in ('dir /b /a-d "%folder_path%\*.txt" ^| sort') do (
    set /a count+=1
    set "file_names[!count!]=%%~nf"
)

REM 写入固定部分
(
echo &ACCESS RVP
echo &REL 15
echo &COMMENT HANDLER on external automatic
echo DEF  CELL ( )
echo   ;EXT EXAMPLE1 ( )
echo   ;EXT EXAMPLE2 ( )
echo   ;EXT EXAMPLE3 ( )
echo.
echo   ;FOLD INIT
echo   DECL CHAR DMY[3]
echo   DMY[]="---"
echo   ;ENDFOLD (INIT)
echo   ;FOLD BASISTECH INI
echo   GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
echo   INTERRUPT ON 3
echo   BAS (#INITMOV,0 )
echo   ;ENDFOLD (BASISTECH INI)
echo   ;FOLD CHECK HOME
echo   $H_POS=XHOME
echo   IF CHECK_HOME==TRUE THEN
echo     P00 (#CHK_HOME,#PGNO_GET,DMY[],0 ) ;Testing Home-Position
echo   ENDIF
echo   ;ENDFOLD (CHECK HOME)
echo   ;FOLD PTP HOME  Vel= 100 %% DEFAULT;%{PE}%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
echo   $H_POS=XHOME
echo   PDAT_ACT=PDEFAULT
echo   BAS (#PTP_DAT )
echo   FDAT_ACT=FHOME
echo   BAS (#FRAMES )
echo   BAS (#VEL_PTP,100 )
echo   PTP  XHOME
echo   ;ENDFOLD
echo   ;FOLD AUTOEXT INI
echo   P00 (#INIT_EXT,#PGNO_GET,DMY[],0 ) ; Initialize extern mode
echo   ;ENDFOLD (AUTOEXT INI)
echo   LOOP
echo     P00 (#EXT_PGNO,#PGNO_GET,DMY[],0 )
echo     SWITCH  PGNO ; Select with Programnumber
) >> "%output_file%"

REM 写入动态部分
for /l %%i in (1,1,%count%) do (
    set "file_name=!file_names[%%i]!"
    (
        echo     CASE %%i
        echo       P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ) ; Reset Progr.No.-Request
        echo       !file_name!() ; Call User-Program
        echo.
    ) >> "%output_file%"
)

REM 写入结尾部分
(
echo     DEFAULT
echo       P00 (#EXT_PGNO,#PGNO_FAULT,DMY[],0 )
echo     ENDSWITCH
echo   ENDLOOP
echo END
) >> "%output_file%"

echo Code has been written to %output_file%
pause


使用说明:
1.设置文件夹路径:将 folder_path 变量设置为包含你要处理的 .txt 文件的文件夹路径。
2.保存和运行脚本:将上述代码保存为 generate_cell.bat 文件,并双击运行它。
3.检查输出:脚本会在当前目录下生成 cell.txt 文件,你可以打开它来查看生成的代码。
注意事项:
1.确保文件夹路径正确,并且文件夹中确实存在 .txt 文件。
2.如果文件名中有特殊字符或空格,请确保这些字符不会影响生成的代码逻辑。
3.如果有其他特定需求或格式要求,请根据需要调整模板和代码逻辑。
通过上述步骤,可以生成符合你要求的 cell.txt 文件。
 楼主| 欺负老实人么 发表于 2025-3-11 17:11
天天上天庭 发表于 2025-3-11 17:07
再给我一个机会, 看看这个。
[mw_shl_code=asm,true]@echo off
setlocal enabledelayedexpansion

谢谢靓仔的回复,我这执行后生成了一个空白的CELL文件,打开就是空白的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2026-4-17 10:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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