Automatische Zuweisung von Laufwerken bei zu langen Pfadtiefen
Hallo Admins,
manchmal findet sich in den Tiefen eines Laufwerkes allerhand Müll oder doch noch etwas Verwertbares.
Um dorthin zu gelangen muss erstmal danach gesucht werden.
Die zu tiefen Pfade sind in der Fehlerausgabe zB. von Laufwerk D:
Dann wäre es gleich von Vorteil, wenn nicht nur eine Auflistung der Daten, sondern auch eine Liste der Zuweisungen vorhanden ist, welche bei Bedarf erhalten Bleibt.
Der Batch listet wahlweise Dateien und/oder Ordner sowie deren Zuweisungen von diesen Untiefen auf.
Eine Hilfe /? ist enthalten.
Wer andere Fehlerausgaben im Verzeichnisauflister hat, möge sie hier zur Integration posten.
zu lange Pfade; Der Dateiname ist zu lang. Der Verzeichnisname ... ist zu lang. MAX_PATH 256 Zeichen, Pfadtiefe auslesen, lange Pfade finden, Windows Pfad zu lang, Auf lange Pfade zugreifen
Gruß Phil
manchmal findet sich in den Tiefen eines Laufwerkes allerhand Müll oder doch noch etwas Verwertbares.
Um dorthin zu gelangen muss erstmal danach gesucht werden.
Die zu tiefen Pfade sind in der Fehlerausgabe zB. von Laufwerk D:
dir /s /b D:\..?.. >nul
Dann wäre es gleich von Vorteil, wenn nicht nur eine Auflistung der Daten, sondern auch eine Liste der Zuweisungen vorhanden ist, welche bei Bedarf erhalten Bleibt.
Der Batch listet wahlweise Dateien und/oder Ordner sowie deren Zuweisungen von diesen Untiefen auf.
Eine Hilfe /? ist enthalten.
@echo off
setlocal
prompt $g$s
if "%~1" equ "" echo Syntaxfehler. 1>&2 &exit /b 1
if "%~1" neq "/?" goto :noHelp
echo Listet bedenkliche Pfad- und Dateinamen mit Pfadtiefe komplett auf.
echo wechselt Selbststaendig in tiefere Pfade.
echo(&echo %~n0 Pfad [/D ^| /-D] [/B] [/P]
echo %~n0 [/X]
echo(&echo /D Es werden nur Ordnerpfade aufgelistet.
echo /-D Es werden nur Dateien aufgelistet.
echo /B Behalten von erzeugten Laufwerkszuweisungen.
echo /P Alle zuvor Verbundenen Laufwerke ^(subst^) werden entfernt.
echo /X Nur alle Zuweiungen entfernen.&echo(
exit /b 0
:noHelp
if /i "%~1" neq "/X" if not exist "%~1" echo Datei nicht gefunden! 1>&2 & exit /b 2
set "SubstDel="
set "DIRCMD=/a-l"
set "Dir=1"
set "DelSubst="
for %%i in ( %1 %2 %3 %4) do (if /i "%%~i" equ "/B" set "SubstDel=:: "
if /i "%%~i" equ "/D" set "DIRCMD=/a-ld" &set "Dir=1"
if /i "%%~i" equ "/-D" set "Dir=" &set "DIRCMD=/a-l"
if /i "%%~i" equ "/X" set "DelSubst=exit /b"
if /i "%%~i" equ "/P" set "DelSubst=rem"
)
rem alte Zuweisungen entfernen
if defined delsubst for /f "delims=\" %%i in ('subst') do subst %%i /d
%delsubst%
set "SubstList=%~dpn0-Substlist.txt"
set "RetourePfad="
set "inPath=%~d1"
set "SubstLW="
set "FreeDrive= B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
set /a Min=240
set "Lastpath=::"
set "M=%temp%\%~n0temp.tmp"
type nul>"%SubstList%"
:search Suche nach tieferen Pfaden
for /f "tokens=2*" %%h in ('^(dir /s /b %1 ^>nul^)^2^>^&1') do if %%h equ Verzeichnisname (
set "F=%%i"
setlocal enabledelayedexpansion
for /f "delims=" %%a in ("!F:~0,-13!") do (endlocal
set "LongPath=%%a"
call :Infile %%~di
set "Lastpath=%RetourePfad%%%~pi"
))
if not defined SubstLW goto :noLW
set /a x=%random%
set "T=%temp%\%~n0-%x%-%random%.txt"
dir /s /b %1 >"%T%" 2>nul
rem suche Verzeichnisse und Dateien ab
for /f "usebackqtokens=*delims=" %%i in ("%T%") do if exist "%%~i" (
set "Outpath=%inPath%%RetourePfad%%%~pnxi"
if defined DIR if exist "%%~i\" call :out " -DIR-"
if not exist "%%~i\" call :out " -file"
)
)
del "%T%" 2>nul
del "%M%" 2>nul
:noLW
exit /b
:InFile Zuweisung eines Tieferen Pfades an einen Laufwerksbuchstaben
setlocal
set "ToSubst=%~d1"
set "SubstLW="
setlocal enabledelayedexpansion
for /d %%i in ("!LongPath!.X\..") do (endlocal
set "ToSubst=%%~fi"
set "RetourePfad=%RetourePfad%%%~pnxi"
)
rem Keine Pfade doppelt absuchen
setlocal enabledelayedexpansion
if !RetourePfad!\ equ !LastPath! endlocal &goto :noTodo
for %%i in (%FreeDrive%) do @(vol %%i:|cd>nul)2>&1|find "System">nul&&set "SubstLW=%%i:"
if not defined SubstLW 1>&2 echo Kein Freies Laufwerk gefunden!& exit /b 3
subst %SubstLW% "%ToSubst%"
rem Pfad aus SubstLW auslesen und zur Liste hinzufuegen
>>"%SubstList%" echo "Subst_%substLW%=%inPath%%RetourePfad%"
>"%M%" <nul set /p =+--- Virtuelle Verbindungen der Daten ----
set "+=+ "
set "++=. . . . . . . . . . . . . . . . . . . . . . . . . . ."
call :checksub %SubstLW% >>"%M%"
>>"%M%" Echo %++%
>>"%M%" echo(
goto :next
:checksub
for /f "tokens=4*delims=\ " %%A in ('subst^|find "%1\:"') do (echo(
echo %1\: %%A\%%B
<nul set /p =%+%
set "+=%+%+ "
set "++=%++:~2%"
call :checksub %%A
)
exit /b
:next
call :search "%substLW%"
:noTodo
%substdel%subst /d %SubstLW% 2>nul >&2
:NotLong
endlocal
exit /b
:out Auflistung der Tiefen Dateien
setlocal enabledelayedexpansion
if !OutPath:~%min%! equ !! exit /b
for /l %%i in (%min% 1000 7000) do if !OutPath:~%%i! neq !! set /a mini=%%i
set /a max=mini+1000
for /l %%i in (%mini% 100 %max%) do if !OutPath:~%%i! neq !! set /a mini=%%i
set /a max=mini+100
for /l %%i in (%mini% 10 %max%) do if !OutPath:~%%i! neq !! set /a mini=%%i
set /a max=mini+10
for /l %%i in (%Mini% 1 %max%) do if !OutPath:~%%i! equ !! if not defined L (set L=1
if exist "%M%" type "%M%" >&3 &del "%M%"
echo %~1 %%i !Outpath!
echo(
)
endlocal
exit /b
Wer andere Fehlerausgaben im Verzeichnisauflister hat, möge sie hier zur Integration posten.
zu lange Pfade; Der Dateiname ist zu lang. Der Verzeichnisname ... ist zu lang. MAX_PATH 256 Zeichen, Pfadtiefe auslesen, lange Pfade finden, Windows Pfad zu lang, Auf lange Pfade zugreifen
Gruß Phil
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 196363
Url: https://administrator.de/contentid/196363
Ausgedruckt am: 21.11.2024 um 16:11 Uhr