PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Batch] CRCresizer


zerobit
26.03.2007, 17:27
ich habe ein Script geschrieben, dass meine Dateinamen umschreibt.
mit Ach und Krach habe ich die For-Schleife hinbekommen.

es schreibt mir meine Dateien:
X:\dir\sub dir\sadfjh - 00 - sdakjf [abc][a1cd3f47].ext
in
X:\dir\sub dir\sadfjh - 00 - sdakjf [abc][A1CD3F47].ext
um.

hier erstmal das Script:

@ECHO OFF
rem Mod by 'zerobit' v0.07.9.054


if "%~x1"=="" cd /d %1
if not "%~x1"=="" cd /d "%~dp1"


:FORs
FOR %%a in ('dir *.* /B /A-D-H /ON') DO echo "%%a"
echo.
FOR %%a in ('dir *.* /B /A-D-H /ON') DO call :CRCrs "%%a"
rem DO echo %%a
rem DO call :CRCrs %%a


:CRCrs
set DropName="%~n1"
echo InF: %DropName%
echo.


set PFNameK01="%DropName:~1,-11%"
echo Cut: %PFNameK01%
echo.


set crc32="%DropName:~-10,-2%"
SET OLDCRC=%crc32%
SET NEWCRC=%OLDCRC:~1,-1%


:meUCASE
SET NEWCRC=%NEWCRC:a=A%
SET NEWCRC=%NEWCRC:b=B%
SET NEWCRC=%NEWCRC:c=C%
SET NEWCRC=%NEWCRC:d=D%
SET NEWCRC=%NEWCRC:e=E%
SET NEWCRC=%NEWCRC:f=F%
SET NEWCRC=%NEWCRC:g=G%
SET NEWCRC=%NEWCRC:h=H%
SET NEWCRC=%NEWCRC:i=I%
SET NEWCRC=%NEWCRC:j=J%
SET NEWCRC=%NEWCRC:k=K%
SET NEWCRC=%NEWCRC:l=L%
SET NEWCRC=%NEWCRC:m=M%
SET NEWCRC=%NEWCRC:n=N%
SET NEWCRC=%NEWCRC:o=O%
SET NEWCRC=%NEWCRC:p=P%
SET NEWCRC=%NEWCRC:q=Q%
SET NEWCRC=%NEWCRC:r=R%
SET NEWCRC=%NEWCRC:s=S%
SET NEWCRC=%NEWCRC:t=T%
SET NEWCRC=%NEWCRC:u=U%
SET NEWCRC=%NEWCRC:v=V%
SET NEWCRC=%NEWCRC:w=W%
SET NEWCRC=%NEWCRC:x=X%
SET NEWCRC=%NEWCRC:y=Y%
SET NEWCRC=%NEWCRC:z=Z%


ECHO.OLDCRC=%OLDCRC%
ECHO.NEWCRC="%NEWCRC%"


:ReName
ren "%~nx1" "%DropName:~1,-11%[%NEWCRC%]%~x1"
echo.
echo "%DropName:~1,-11%[%NEWCRC%]%~x1"
GOTO :EOF


:end
rem PAUSE

obwol das Script funktioniert, hat es ein Schöhnheitsfehler,
duch die grau-kursiv Markierte For-Schleife habe ich mir die zu verarbeitenen Zeilen anzeigen lassen:
"'dir"
"axfghnlfgh jlkfg [fedc9874].ext"
"bsfgkh fkgjhlkfgh [asdf1234].ext"
"cewrhgekhg aksdfghkj [acefb012].ext"
"/B"
"/A-D-H"
"/ON'"
dadurch passiert sowas:
InF: "'dir"

Cut: ""

OLDCRC=""'di"
NEWCRC=""'DI"
Das System kann die angegebene Datei nicht finden.

"["'DI]"
InF: "axfghnlfgh jlkfg [fedc9874]"

Cut: "axfghnlfgh jlkfg "

OLDCRC="fedc9874"
NEWCRC="FEDC9874"

"axfghnlfgh jlkfg [FEDC9874].ext"
InF: "bsfgkh fkgjhlkfgh [asdf1234]"

Cut: "bsfgkh fkgjhlkfgh "

OLDCRC="asdf1234"
NEWCRC="ASDF1234"

"bsfgkh fkgjhlkfgh [ASDF1234].ext"
InF: "cewrhgekhg aksdfghkj [acefb012]"

Cut: "cewrhgekhg aksdfghkj "

OLDCRC="acefb012"
NEWCRC="ACEFB012"

"cewrhgekhg aksdfghkj [ACEFB012].ext"
InF: "B"

Cut: ""

OLDCRC="""
NEWCRC="""
Das System kann die angegebene Datei nicht finden.

"["]"
InF: "A-D-H"

Cut: ""

OLDCRC=""A-D-"
NEWCRC=""A-D-"
Das System kann die angegebene Datei nicht finden.

"["A-D-]"
InF: "ON'"

Cut: ""

OLDCRC=""ON"
NEWCRC=""ON"
Das System kann die angegebene Datei nicht finden.

"["ON]"

welchen Fehler habe ich gemacht?


Mr.Homm
26.03.2007, 20:49
Du hast den Paramter /f bei der for-Schleife vergessen. Siehe "for /?".

zerobit
26.03.2007, 21:03
kann ich nicht machen sonnst trennt die For-Schleife nach jeden Leerzeichen.
was bei dateinamen mit Leerzeichen problematisch ist, d.h. geht nicht.
nur wenn ich die Möglichkeit hätte dieses Leer-Trennzeichen wieder zu entfernen.

auszug aus der hilfe (for /?)
"Standardmäßig liefert /F den ersten, durch ein Leerzeichen
getrennten Token von jeder Zeile in jeder Datei"

[edit:]
ich hab's
ich musste die option delims= in anführungsstriche schreiben
--> "delims="

das sieht dann so aus:
FOR /F "delims=" %%a in ('dir *.* /B /A-D-H /ON') DO call :CRCrs "%%a"


...danke für die hilfe...

Mr.Homm
26.03.2007, 21:13
kann ich nicht machen sonnst trennt die For-Schleife nach jeden Leerzeichen.
was bei dateinamen mit Leerzeichen problematisch ist, d.h. geht nicht.
nur wenn ich die Möglichkeit hätte dieses Leer-Trennzeichen wieder zu entfernen.

auszug aus der hilfe (for /?)
"Standardmäßig liefert /F den ersten, durch ein Leerzeichen
getrennten Token von jeder Zeile in jeder Datei"
Stimmt, versuch' mal:

for /f "delims=" ...


EDIT:
Gut, hast selbst schon gefunden :).