Roger Away
Roger Away

Reputation: 35

Count the underscores in the Filename with a bat

I have searched this everywhere and I didn't found it, so what I want to do is simple, I want to count the underscores in a filename and put it in a variable to later use it.

Is there any simple batch code to do it ?

Upvotes: 1

Views: 457

Answers (3)

Hackoo
Hackoo

Reputation: 18827

This solution is inspired from @xmcp :

@echo off
Rem The srting to count in the filename is the underscrore "_"
Rem we can of course set another one ;) 
set "MyString=_"
setlocal enabledelayedexpansion
@for /f "delims=" %%a in ('Dir /b "%userprofile%\Desktop"') do (
   set "filename=%%a"
   set /a "cnt=0"
   set /a "pos=0"
   Call:Counting_String "!filename!" "%Mystring%"
)
pause & exit
::*********************************************************
:Counting_String <filename> <MyString>
set "filename=%~1"
set "string=%~2"
if /I "!filename:~%pos%,1!"=="%Mystring%" set /a cnt+=1
set /a pos+=1
if not "!filename:~%pos%,1!"=="" goto Counting_String
echo !filename!: [!cnt!] "%Mystring%"
exit /b
::*********************************************************

Upvotes: 0

user6811411
user6811411

Reputation:

A different method to count underscores (or more exact elements separated by an underscore)
is to use self expanding code:

:: Q:\Test\2017\08\28\SO_45917406.cmd
@echo off & setlocal enabledelayedexpansion

set "FileName=example_file_name_20170828_181000.txt"
Set i=1&Set "FileName[!i!]=%FileName:_="&Set /a i+=1&Set "FileName[!i!]=%"

Echo Counted %i% underscore separated elements
Set FileName

Sample output:

> Q:\Test\2017\08\28\SO_45917406.cmd
Counted 5 underscore separated elements 
FileName=example_file_name_20170828_181000.txt
FileName[1]=example
FileName[2]=file
FileName[3]=name
FileName[4]=20170828
FileName[5]=181000.txt

Upvotes: 1

xmcp
xmcp

Reputation: 3742

@echo off
setlocal enabledelayedexpansion

set filename=__example_file.bin_
set cnt=0
set pos=0

:loop
if "!filename:~%pos%,1!"=="_" set /a cnt=%cnt%+1
set /a pos=%pos%+1
if not "!filename:~%pos%,1!"=="" goto loop

echo Count: %cnt%

That code is pretty ugly but I can't find a better way so far.

Upvotes: 2

Related Questions