Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[R] Comment compter un string dans une variable ?
Auteur Message
Répondre en citant
Message [R] Comment compter un string dans une variable ? 
Salut Wink
J'ai ce script pour compter le trait de soulignement "_" dans une variable de nom de fichier!
Mais, j'ai toujours le compte égal à zéro?
Quel est le problème avec ce script?

Code:
@echo off
set /a "cnt=0"
set /a "pos=0"
setlocal enabledelayedexpansion
@for /f "delims=" %%a in ('Dir /b "%userprofile%\Desktop"') do (
   set "filename=%%a"
   Call:Stringloop "!filename!"
)

pause & exit
::**************************************************
:Stringloop <filename>
set "filename=%~1"
if "!filename:~%pos%,1!"=="_" set /a cnt+=1
set /a pos+=1
if not "!filename:~%pos%,1!"=="" goto Stringloop
echo !filename! : !cnt!
exit /b
::*************************************************




Dernière édition par Hackoo le Mar 29 Aoû 2017 - 03:07; édité 1 fois

______________________________________________________
Mes Contributions en Téléchargement
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [R] Comment compter un string dans une variable ? 
Salut Mr. Green

Chez moi ça reste bloqué à 3 xD
Tu as juste fait une erreur de débutant, tkt ça m'arrive aussi Okay

En fait, les variables cnt et pos ne sont jamais remis à 0 donc au bout du 1er fichier pos vaut par exemple 5
La variable qui fait buguer le script c'est pos, cnt peut rester comme elle est Mr. Green

La correction :

Code:
@echo off
set /a "cnt=0"
set /a "pos=0"
setlocal enabledelayedexpansion
@for /f "delims=" %%a in ('Dir /b "%userprofile%\Desktop"') do (
   set "filename=%%a"
   set /a "cnt=0"
   set /a "pos=0"
   Call:Stringloop "!filename!"
)
 
pause & exit
::**************************************************
:Stringloop <filename>
set "filename=%~1"
if "!filename:~%pos%,1!"=="_" set /a cnt+=1
set /a pos+=1
if not "!filename:~%pos%,1!"=="" goto Stringloop
echo !filename!: !cnt!
exit /b
::*************************************************



Sinon ya moyen d'aller un peu + vite :
Code:
@echo off
setlocal enabledelayedexpansion

for /f "delims=" %%a in ('Dir /b "%userprofile%\Desktop"') do (
   set "filename=%%a"
   call :strcount "return" "filename" "_"
   echo !filename!: !return!
)
 
pause & exit
::**************************************************
:strlen <resultVar> <stringVar>
  set "s=!%~2!#"&set "len=0"
  for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do if "!s:~%%P,1!" NEQ "" set /a "len+=%%P"&set "s=!s:~%%P!"
  set "%~1=!len!"
goto :eof
:strcount <resultVar> <stringVar> <character>
  call :strlen "a" "%~2"&set b=!%~2:%~3=!&call :strlen "c" "b"&set /a "%~1=!a!-!c!"&if !d! LSS 0 set /a "%~1=!%~1!*-1"
goto :eof
::*************************************************




edit :

encore + vite :
Code:
@echo off
setlocal enabledelayedexpansion

for /f "delims=" %%a in ('Dir /b "%userprofile%\Desktop"') do (

  set "filename=%%a"
  set "s=!filename!#"&set "len=0"
  for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do if "!s:~%%P,1!" NEQ "" set /a "len+=%%P"&set "s=!s:~%%P!"
  set "a=!len!"
  set b=!filename:_=!
  set "s=!b!#"&set "len=0"
  for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do if "!s:~%%P,1!" NEQ "" set /a "len+=%%P"&set "s=!s:~%%P!"
  set "c=!len!"
  set "filename=%%a"&set /a "filename.lenght=!a!-!c!"&if !d! LSS 0 set /a "filename.lenght=!filename.lenght!*-1"


  echo !filename!: !filename.lenght!
)
 
pause & exit




Dernière édition par Flammrock le Mar 29 Aoû 2017 - 03:10; édité 2 fois

______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message [R] Comment compter un string dans une variable ? 
Merci bien Flammrock your are my saver as usual Very Happy Mr. Green Okay




______________________________________________________
Mes Contributions en Téléchargement
Répondre en citant
Message [R] Comment compter un string dans une variable ? 
salut,

si j'ai bien compris le besoin :

Code:
set /a occurences=0
for %%i in ("%filename:_=","_","%") do @if "%%~i"=="_" @set /a occurences+=1
echo %occurences% occurences of "_" in "%filename%"




Message [R] Comment compter un string dans une variable ? 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch