hvordan man tjekker 'eller equ' i Windows Batch-fil

Indlæg af Hanne Mølgaard Plasc

Problem



Er en nybegynder til Windows-batchfil og har kæmpet med dette script i mere end 8 timer med flere eksperimenter .. men ikke held og lykke ...


Dette er min kode


@echo off
setlocal ENABLEDELAYEDEXPANSION

FOR \%\%f IN (*.*) DO (
   echo \%\%f
   echo \%\%~xf

   IF \%\%~xf==".xml" |= ".java" (
     echo file needed
   ) ELSE(
     echo file not needed
     del \%\%f
   )

 )


1) Kan ikke få |=til at arbejde; Kommer '| var uventet på nuværende tidspunkt.' fejl


2) Hvordan laver man dette arbejde for alle filer og subdir under denne fodler?


3) Jeg prøvede også følgende:


@echo off
setlocal ENABLEDELAYEDEXPANSION
FOR \%\%f IN (*.*) DO (
   set todel=yes
   echo \%\%~xf
   echo todel=\%todel\%
   IF \%\%~xf==".xml" (
     todel=no   
   )
   IF \%\%~xf==".java" (
     todel=no   
   )
   echo todel=\%todel\%
   IF \%todel\%=="yes" (
     del \%\%f
   )
)


todel er altid tom. Gætter jeg ikke kan sætte det på denne måde inden for løkken?


Enhver hjælp er værdsat. Tak!

Bedste reference


Der er nok en bedre måde at gøre, hvad du effektivt gør i denne kode, men her er en grundlæggende struktur, der hjælper dig med at forstå bedre, hvordan cmd.exe gør dette.


@Echo Off
For \%\%A In (*.*) Do (
    If /I Not "\%\%~xA"==".xml" (
        If /I Not "\%\%~xA"==".java" (
            Echo \%\%~xA file not needed
            Echo Del \%\%A
        ) Else (
            Echo .java file needed
        )
    ) Else (
        Echo .xml file needed
    )
)
Timeout -1


Skift Echo Del \%\%A til Del \%\%A på linje 6, hvis du virkelig vil lade scriptet slette filerne i stedet for bare at vise dig slette kommandoen.

Andre referencer 1


En anden mulighed er at bruge kommandoen DIR og rør det til kommandoen FINDSTR for blot at liste de filer, du skal slette.


FOR /F "DELIMS=" \%\%G IN (`dir /b /s *.* ^|findstr /E /V ".xml .java"`) DO del "\%\%G"