⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rename.txt

📁 实现在指定目录及其子目录中搜索指定扩展名的文件
💻 TXT
字号:
.386
WRITE MACRO A
      LEA DX,A
      MOV AH,9
      INT 21H
ENDM
DATA SEGMENT USE16
SII DW ?
DIRO DB 80 DUP(0)
DIRN DB 80 DUP(0)
DIR3 DB 80 DUP(0)
DIR_BUF DB 44 DUP(0)	            
LENG DW ?
LENG2 DW ?
OLD DB 5 DUP(0)
NEW DB 5 DUP(0) 
BUF DB 0AH,0DH,'The file '
BUF1 DB 25 DUP(0) ,0AH,0DH,'is  existed,do you want to cover it ,press y to cover it press other keys to skip: $'
FLAG DB ?
ERROR1 DB 0AH,0DH,'MINAND ERROR! $'
ERROR2 DB 0AH,0DH,'PATH ERROR OR PATH NOT EXISTED! $'
DATA ENDS

STACK SEGMENT USE16
    DB  400 DUP(0)
STACK ENDS

CODE SEGMENT USE16
    ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
START:
    MOV AX,DATA
    MOV DS,AX
    MOV AH,51H
    INT 21H
    MOV ES,BX
    MOV SI,80H
    INC SI
    LEA DI,FLAG
    CALL _PART
    MOV SII,SI
    LEA DI,DIRO
    CALL _PART
    MOV SI,SII
    LEA DI,DIRN
    CALL _PART
    MOV SI,SII
    LEA DI,DIR3
    CALL _PART
    MOV BX,CX
    DEC BX
    CMP DIRN[BX],'\'
    INC BX 
    JE NEXT
    MOV DIRO[BX],BYTE PTR '\'
    MOV DIRN[BX],BYTE PTR '\'
    MOV DIR3[BX],BYTE PTR '\'
     INC BX
       MOV DIRN[BX],0
       MOV DIRO[BX],0
       MOV DIR3[BX],0
 NEXT:
    LEA DI,OLD
    CALL _PART
    LEA DI,NEW
    CALL _PART
    PUSH DS
    POP ES 
    CMP FLAG,BYTE PTR '1'
    JNE FLAG1 
    CALL SOME
    JMP EXITT
FLAG1:
    CMP FLAG, BYTE PTR '2'
     JNE ERROR
     MOV LENG,BX
     MOV LENG2,BX
     CALL RNAME
     JMP EXITT
ERROR:WRITE ERROR1
EXITT:
    MOV AH,4CH
    INT 21H
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
RNAME  PROC                      ;DIR保存路径     OLD 保存原始后缀,NEW保存新后缀,LENG路径串长度
       PUSH DI
       PUSH BX
       MOV BX,LENG                                ;LENG,LENG1
       MOV DIRO[BX],BYTE PTR '*'
       MOV DIR3[BX],BYTE PTR '*'
       INC BX
       MOV DIRO[BX],BYTE PTR '.'
       MOV DIR3[BX],BYTE PTR '.'
       INC BX
       LEA DI,DIRO
       LEA SI,OLD
       CALL ADDS
       LEA DI,DIR3
       LEA SI,OLD
       CALL ADDS 
       LEA DX,DIR_BUF
       MOV AH,1AH
       INT 21H
       LEA DX,DIRO
       MOV CX,0
       MOV AH,4EH
       INT 21H
       JNC  CHAN
       CMP AX,3
       JNE EXIT2
       WRITE ERROR2
       MOV AH,4CH
       INT 21H 

CHAN:  CALL CHANGE
 P3  : LEA DX,DIR3
       MOV CX,0
       MOV AH,4FH
       INT 21H
       JC  EXIT2
       CALL CHANGE
       JMP P3
EXIT2 :
       POP BX 
       POP DI
       RET
RNAME  ENDP
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CHANGE PROC
       PUSH BX
       MOV BX,LENG2
       LEA DI,DIR_BUF+30
  P:   MOV AL,[DI]
       CMP AL,'.'
       JE  EXIT1
       MOV DIRN[BX],AL
       MOV DIRO[BX],AL
       INC DI
       INC BX
       JMP P
 EXIT1:
       MOV DIRN[BX],'.'
       MOV DIRO[BX],'.'
       INC BX
       MOV LENG ,BX
       LEA DI,DIRO
       LEA SI,OLD
       CALL ADDS  ;将原始后缀加于diro
       MOV BX,LENG
       LEA DI,DIRN
       LEA SI,NEW
       CALL ADDS  ;将新后缀加于dirn
       LEA DX,DIRO
       LEA DI,DIRN
       MOV AH,56H
       INT 21H
       CMP AL, 5
       JNE OUT2
      MOV SI,DI
       LEA DI,BUF1
       
       MOV BX,0
       CALL ADDS
      MOV DI,SI
       MOV BX,DX
       WRITE BUF
     
       MOV AH,1
       INT 21H
       CMP AL,'Y'
       JE  RE
       CMP AL,'y'
       JNE OUT2
   RE: 
       MOV DX,DI
       MOV AH,41H
       INT 21H
       MOV DX,BX
       MOV AH,56H
       INT 21H    
       JNE OUT2
       
OUT2:  POP BX
       RET
CHANGE  ENDP  
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ADDS PROC                          ;DI 目的串,SI原串 bx 原串原始长度
     PUSH DI
     PUSH SI
     PUSH BX
     ADD DI,BX
 P2: CMP [SI],BYTE PTR 0
     JE  EXIT3
     MOV AL,[SI]
     MOV [DI],AL
     INC SI
     INC DI
     JMP  P2
  EXIT3:  
     MOV [DI],BYTE PTR 0
    POP BX
     POP SI
     POP DI
     RET
ADDS ENDP  
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_PART PROC
    PUSH AX
    PUSH DI
    MOV CX,0 
A:  CMP ES:[SI],BYTE PTR ' '
    JNE B
    INC SI
    JMP A
B:  MOV AL,ES:[SI]
    MOV [DI],AL
    INC CX
    INC SI
    INC DI
    CMP ES:[SI],BYTE PTR ' '
    JE OUT1
    CMP ES:[SI],BYTE PTR 0DH
    JNE B
OUT1:POP DI
    POP AX
    RET
_PART ENDP
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
REALL PROC
      PUSH SI
      PUSH DI
      MOV SI,SII
      LEA DI,DIRO
      CALL _PART
      MOV SI,SII
      LEA DI,DIRN
      CALL _PART
      MOV SI,SII
      LEA DI,DIR3
      CALL _PART
      MOV BX,CX
      LEA DI,OLD
      CALL _PART
      LEA DI,NEW
      CALL _PART
      
      CALL SOME
      POP DI
      POP SI
      RET
REALL ENDP
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SOME PROC                           ;路径,原始后缀,新后缀,路径长度,由于递归故用堆栈保存长度,于是用Bx传入
     MOV LENG ,BX
     MOV LENG2,BX
     call RNAME
     MOV DIR3[BX],'*'
     INC BX
     MOV DIR3[BX],0
     PUSH BX
     LEA DX,DIR_BUF
     MOV AH,1AH
    INT 21H
    LEA DX,DIR3
    MOV CX,10H
    MOV AH,4EH
    INT 21H
    JC EXIT3
     MOV BX,LENG2
       LEA DI,DIR_BUF+30
      MOV AL,[DI]
       CMP AL,'.'
       JE  PP
 LOOP1:MOV AL,[DI]
       CMP AL,0
       JE  PPP
       MOV DIRN[BX],AL
       MOV DIRO[BX],AL
       MOV DIR3[BX],AL
       INC DI
       INC BX
       JMP   LOOP1
PPP:
       MOV DIRN[BX],'\'
       MOV DIRO[BX],'\'
       MOV DIR3[BX],'\'
       INC BX
       MOV DIRN[BX],0
       MOV DIRO[BX],0
       MOV DIR3[BX],0
       MOV SI,0
PP1 :   CMP SI,20
        JE  QUIT1
        PUSH  WORD PTR DIR_BUF[SI]
        ADD SI,2
        JMP PP1
        QUIT1:
        CALL SOME
         MOV SI,20
PP2  :  CMP SI,0
        JE PP
        POP  WORD PTR DIR_BUF[SI]
        SUB SI,2
         JMP PP2
PP:      POP BX
    LEA DX,DIR_BUF
    MOV AH,1AH
    INT 21H
    LEA DX,DIR3
    MOV CX,10H
    MOV AH,4FH
    INT 21H
    JC  EXIT4
   PUSH BX
    DEC BX
    LEA DI,DIR_BUF+30
    MOV AL,[DI]
    CMP AL,'.'
   JE  PP
LOOP2:MOV AL,[DI] 
       CMP AL,0
       JE  PPPP
       MOV DIRN[BX],AL
       MOV DIRO[BX],AL
       MOV DIR3[BX],AL
       INC DI
       INC BX
       JMP   LOOP2
PPPP : MOV DIRN[BX],'\'
       MOV DIRO[BX],'\'
       MOV DIR3[BX],'\'
       INC BX
       
       MOV DIRN[BX],0
       MOV DIRO[BX],0
       MOV DIR3[BX],0
       MOV SI,0
PP5: PUSH  WORD PTR DIR_BUF[SI]
    ADD SI,2
      CMP SI,20
    JBE PP5
   CALL SOME
    MOV SI,20
PP4: POP  WORD PTR DIR_BUF[SI]
    SUB SI,2
     CMP SI,0
    JGE PP4
    JMP PP
EXIT4:        
     RET
SOME ENDP
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CLEAR PROC 
PUSH DI
PUSH CX
       CMP CX,0
       JZ EXITA                           ;DI为路径址,CX为长度
LOOPA:MOV [DI],BYTE PTR 0
         INC DI
        LOOP LOOPA
EXITA:       
      POP CX
      POP DI      
      RET
CLEAR  ENDP
;>>>>>>>>>>>>>>>>>>>>>>>>>.>>>>>>>>
CODE ENDS
    END START














































































⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -