1

たとえば、フォルダー テストといくつかのファイルがあります。 9文字で構成されています。name "test12.txt" は 10 文字で構成されます。等々。

私はこのスクリプトを書きましたが、動作しません:(

   @echo off
    setlocal enableextensions enabledelayedexpansion
    set /p directory="specify Desirable Dir: "
    pushd "%directory%"
     for %%j in (*) do (
        set /a countch=0
          set OFileName=%%j
            :loop
            set NFileName=!OFileName:~0,%countch%!
            IF !OFileName!==!NFileName! (
                echo name "!OFileName!" consists of %countch% chars
            ) ELSE (
                set /a countch = countch + 1
                goto loop
            )    
    )
    popd
    endlocal
    pause

助けてください!前もって感謝します ;)

4

2 に答える 2

1
@ECHO OFF
SETLOCAL 
SET "sourcedir=c:\sourcedir"
pushd "%sourcedir%"
for %%j in (*) do (
 set OFileName=%%j
 SETLOCAL ENABLEDELAYEDEXPANSION
 SET "ch="
 FOR /l %%L IN (2048,-1,0) DO IF NOT DEFINED ch (
  set ch=!OFileName:~%%L,1!
  IF DEFINED ch SET /a ch=1+%%L&echo name "!OFileName!" consists of !ch! chars
 )
 ENDLOCAL 
)
popd
GOTO :EOF

(テスト用にターゲットディレクトリを変更しましたが...)

于 2013-09-09T15:30:11.863 に答える
1

strlenここでは、多数の実装 を見つけることができます: http://ss64.org/viewtopic.php?id=424

:

  @echo off
    setlocal enableextensions enabledelayedexpansion
    set /p directory="specify Desirable Dir: "
    pushd "%directory%"
     for %%j in (*) do (

          set "OFileName=%%j"
          call :strlen0.3 OFileName fnamelen
          echo !fnamelen!
    )
    popd
    endlocal
    goto :eof

:strlen0.3  StrVar  [RtnVar]
  setlocal EnableDelayedExpansion
  set "s=#!%~1!"
  set "len=0"
  for %%A in (2187 729 243 81 27 9 3 1) do (
    set /A mod=2*%%A
    for %%Z in (!mod!) do (
        if "!s:~%%Z,1!" neq "" (
            set /a "len+=%%Z"
            set "s=!s:~%%Z!"

        ) else (
            if "!s:~%%A,1!" neq "" (
                set /a "len+=%%A"
                set "s=!s:~%%A!"
            )
        )
    )
  )
  endlocal & if "%~2" neq "" (set %~2=%len%) else echo **%len%**
exit /b
    pause
于 2013-09-09T09:06:33.880 に答える