2017-08-28 6 views
1

私はこれをどこからでも探していますが、見つからなかったので、やりたいことは簡単です。ファイル名にアンダースコアを数え、変数に入れたい後でそれを使用してください。ファイル名の下線をバットでカウントする

これを行う簡単なバッチコードはありますか?

+1

あなたは何を試しましたか? これまでのところ? – CristiFati

答えて

2
@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% 

このコードはかなり醜いですが、私はこれまでのところより良い方法を見つけることができません。

+0

何かの仕事がありましたが、%cnt%変数をトークンに挿入しようとすると、tdelimsが予期せぬものであったことがわかりました。 –

+0

@RogerAway 'for/f'ループは先頭の区切り文字を無視し、連続する区切り文字を1つだけ数えます。/fのために適切なのは次のようなものです: 'for/f" tokens =%cnt%delims = _ "%% A"(%ファイル名% ")do Echo %% A' – LotPings

+0

これは私のコードです。 :/ f "tokens =%cnt%delims = _" %% b in( "%%〜na")の @LotPings –

1

下線(または下線で区切られた、より正確な要素)をカウントするための異なる方法
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 

サンプル出力:

> 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 
0

この溶液からインスピレーションを得ています@ 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 
::********************************************************* 
関連する問題