2016-05-20 16 views
1

Dies ist mein erster Beitrag und ich hoffe, jemand kann mir helfen.Überprüfen Sie die Länge eines Dateipfads mit einer Stapeldatei. #stringlength

Ich bin ziemlich neu zu. BAT-Dateien, aber ich habe ein grundlegendes Verständnis von PHP und C++.

Ich muss eine Batch-Datei schreiben, die Folgendes tun wird: 1. Zeigen Sie alle Dateien einschließlich voller Dateipfad im aktuellen Ordner. 2. Anzeigedauer der angezeigten Dateien einschließlich des Dateipfads für jede einzelne Datei. 3. Vielleicht zeigen Sie, wie viele Dateien es insgesamt gibt.

Ich habe dies bisher geschrieben und es funktioniert Job # 1 und # 3, aber ich kann es nicht bekommen zeigen die String-Länge.

@echo off 
for /r . %%g in (*.*) do (
    echo %%g 
)  
set cnt=0 
for %%A in (*) do set /a cnt+=1 
set /A cnt=cnt-1 
echo Dateien im Verzeichnis = %cnt% 
PAUSE 

fand ich zwei andere Skripts, das jede Länge eines Strings zu identifizieren oder zu einem Weg, aber ich konnte sie nicht mit meinem ersten Skript zusammen.

Hier ist die eine für String Länge:

@echo off 
set myvar="some string" 
rem compute the length of a string 
set #=%myvar% 
set length=0 
:loop 
if defined # (
    rem shorten string by one character 
    set #=%#:~1% 
    rem increment the string count variable %length% 
    set /A length += 1 
    rem repeat until string is null 
    goto loop 
) 
echo myvar is %length% characters long! 
PAUSE 

Und hier noch ein Stück, das die Pfadlänge des aktuellen Ordners angezeigt wird:

@echo off 
echo %cd%>"%TMP%\Temp.txt" 
for %%l in ("%TMP%\Temp.txt") do set /a len=%%~zl 
del "%TMP%\Temp.txt" 
set /a len-=2 
echo Path length = %len% chars. 
PAUSE 
+0

[Hier ist eine nützliche und effiziente ': length' Nutzenfunktion] (http://stackoverflow.com/a/35203119/1683264) Sie in Ihr Skript anschließen können. [Siehe diese Seite] (http://www.dostips.com/DtTutoFunctions.php) für weitere Informationen zu Batch-Skriptfunktionen. – rojo

+0

Ich scheine nicht in der Lage, es zur Arbeit zu bekommen..Es gab mir einige Zufallszahlen wie 4 ... 8 ... 28 für jeden meiner Dateipfade, die definitiv länger sind. Wäre es zu viel verlangt, dass du es für mich zusammenstellst, wie du es dir vorgestellt hast? Ich denke, ich habe ein Problem mit globalen und lokalen Variablen. Irgendetwas ist definitiv falsch. Vielen Dank im Voraus, luke –

+0

Es ist wahrscheinlich ein verzögertes Erweiterungsproblem. Ich werde eine Antwort posten. – rojo

Antwort

1

Hier ist eine Lösung auf Basis von this :length util function. Weitere Informationen zu Batch-Skriptfunktionen finden Sie unter see this page. Sie sollten auch read more about delayed expansion. Auch wenn Sie keine verzögerte Erweiterung verwenden, steht setlocal ought to be included ganz oben in Ihren Skripten.

@echo off 
setlocal 

set "files=0" 

for %%I in (*) do (
    set /a files += 1 
    call :length len "%%~fI" 

    rem // delay expansion of %files% and %len% because of reasons 
    setlocal enabledelayedexpansion 
    echo !files!: %%~fI is !len! characters long. 
    endlocal 
) 

goto :EOF 

:length <return_var> <string> 
setlocal enabledelayedexpansion 
if "%~2"=="" (set ret=0) else set ret=1 
set "tmpstr=%~2" 
for %%I in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
    if not "!tmpstr:~%%I,1!"=="" (
     set /a ret += %%I 
     set "tmpstr=!tmpstr:~%%I!" 
    ) 
) 
endlocal & set "%~1=%ret%" 
goto :EOF 
+0

lieber rojo, danke für deine hilfe. Das funktioniert! Mein Chef war sehr glücklich, dass wir IT nicht bitten mussten, uns ein paar skizzenhafte Freeware-Sachen herunterzuladen. Hab eine tolle Woche und danke für alles! –

+0

@LukeFast Wenn meine Antwort hilfreich war, erwäge bitte, sie als akzeptiert zu markieren. [Siehe diesen Q/A Beitrag] (http://meta.stackexchange.com/q/5234/275822) für eine Erklärung, warum dies wichtig ist. – rojo