Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Sonderzeichen in Ordner und Dateinamen mit VBScript ersetzen. (bastlas script)

Mitglied: 82312

82312 (Level 1)

24.11.2009, aktualisiert 15:44 Uhr, 13497 Aufrufe, 15 Kommentare

Hallo Zusammen,

ich habe folgendes mit der Suchfunktion gefunden:

https://www.administrator.de/index.php?content=73180#283532
https://www.administrator.de/index.php?content=116440

Das Skript funktioniert soweit auch wunderbar. Danke an bastla für dieses Skript.

Mein Problem ist nun, das bei mir wirklich ALLE Sonderzeichen die in folgender ASCII Tabelle stehen durch "_" ersetz werden sollen.

http://www.torsten-horn.de/techdocs/ascii.htm

Wie kann ich die "SonderzeichenErsetzung.txt" so erweitern, dass diese Zeichen nun auch ersetz werden?
Ich habe schon einiges probiert, bin aber nicht so ganz fit mit den verschiedenen Codes.

Vielen Dank,
baeks

*EDIT*

Ich habe noch einen Script von bastla gefunden. Die Version mit der Liste von Zeichen die zugelassen werden scheint mir sinnvoller als eine Liste von Zeichen die nicht zugelassen werden, da sie viel kürzer ist. Ist es möglich auch Ordner damit umzubenennen?
Mitglied: 76109
24.11.2009 um 15:15 Uhr
Hallo baeks1986!

Mit Deinem Problem habe ich mich noch nicht beschäftigt, aber die Scancodes auf Deiner Website sind teilweise nicht korrekt. Hier eine Excel-Tabelle mit den kompletten Scancodes der erweiterten MFII-Tastatur:
f11c91034327d4ed12d7d81f3604bb78-scancodes - Klicke auf das Bild, um es zu vergrößern

Gruß Dieter
Bitte warten ..
Mitglied: 82312
24.11.2009 um 15:40 Uhr
Danke für den Hinweis, aber ich hatte die Tabelle mit Asc() und Chr() stichprobenartig geprüft und habe keine fehler gefunden, welche sollen denn falsch sein?

Gruss
baeks
Bitte warten ..
Mitglied: 76109
24.11.2009 um 16:21 Uhr
Hallo braeks1986!

habe nicht alle durchgesehen, aber zumindest diese beiden Scancodes stimmen nicht:
2B - "<" falsch = 56h
29 - "#" falsch = 2Bh

Fehlt z.B.:
Space = 39h

Gruß Dieter
Bitte warten ..
Mitglied: 76109
25.11.2009 um 07:29 Uhr
Hallo baeks1986!

Im Prinzip, muss nur die Ersetzen-Liste mit den Sonderzeichen entsprechend erweitert werden. Sollen z.B. die Zeichen "§$#" durch "_" ersetzt werden, dann müsstest Du nur "_,§,$,#" in einer neuen Zeile anfügen. Ansonsten wäre es hilfreich, wenn Du erstmal klar definierst, was Deiner Meinung nach alles zu den Sonderzeichen zählt und/oder welche Zeichen zugelassen sind und ob Htm-Pseudos auch berücksicht werden müssen und und und???

Gruß Dieter
Bitte warten ..
Mitglied: 82312
25.11.2009 um 10:01 Uhr
Sonderzeichen sind bei mir in dem Fall alle Zeichen, die nicht AaBb [...]Zz und nicht 0123456789 sind. Genau das meinte ich, wie kann ich diese Tabelle erweitern, ich habe den Aufbau der ersetzen Tabelle noch nicht ganz verstanden.
Bitte warten ..
Mitglied: 76109
25.11.2009 um 10:21 Uhr
Hallo baeks1986!

Die Ersetzen-Funktion und Ersetzentabelle ist so aufgebaut, dass der Zeichen-Teil vor dem ersten Komma, alle nachfolgenden durch Kommagetrennte Zeichen ersetzt. Das können 1 Zeichen oder Zeichenfolgen wie bei den Htm-Pseudos sein.

Beispiel: _,§,$,ä,ö,ü,text

"§" wird ersetzt durch "_"
"$" wird ersetzt durch "_"
"ä" wird ersetzt durch "_"
"ö" wird ersetzt durch "_"
"ü" wird ersetzt durch "_"
"text" wird ersetzt durch "_"

Und was ist mit den Htm-Pseudos z.b. &uuml; oder %C0 und Umlauten. Hast Du Htm-Pseudos in Deinen Datei- und Ordnernamen?

Wenn nicht, würde man keine Ersetzen-Tabelle benötigen und das Ganze mit einer If- oder Case-Anweisungen lösen.

Gruß Dieter
Bitte warten ..
Mitglied: 82312
25.11.2009 um 18:21 Uhr
Hi Dieter,

danke schonmal für deine Hilfe, in meinen Dateinamen kommen keine HTM-Pseudos vor. Wie würde die Case-Anweisung dann aussehen?

Select Case Zeichen
Case "$"
?????
Case "%"
?????
End Select

Und die ???? sind dann die Ersetzen funktion?

Ich glaube ich mach das doch mit der Tabelle, scheint mir einfacher und ist dann wohl auch für dich/euch einfacher mir zu erklären.

Vielen Dank schonmal,
Max
Bitte warten ..
Mitglied: 76109
25.11.2009 um 21:54 Uhr
Hallo baeks1986!

Eigentlich hatte ich an so was gedacht, aber leider geht das nur in VBA. In VBS gibt es keinen To-Operator:
01.
Select Case c 
02.
    Case "A" To "Z" 
03.
    Case "a" To "z" 
04.
    Case "0" To "9" 
05.
    Case Else 
06.
         'Tue Was 
07.
End Select
In VBS dann entweder so (das gleiche in Grün):
01.
Function ReplaceSpecialChar(ByRef Text) 
02.
     
03.
    s = Text 
04.
     
05.
    For i = 1 To Len(s) 
06.
        c = Mid(s, i, 1) 
07.
        If c >= "0" And c <= "9" Then	'Wenn True Do Nothing 
08.
        ElseIf c >= "A" And c <= "Z" Then	'Wenn True Do Nothing 
09.
        ElseIf c >= "a" And c <= "z" Then	'Wenn True Do Nothing 
10.
        Else 
11.
             s = Replace(s, c, "_")		'Wenn False Do Replace 
12.
        End If 
13.
    Next 
14.
     
15.
    ReplaceSpecialChar = s 
16.
End Function
oder etwas aufwendiger so:
01.
Function ReplaceSpecialChar(ByRef Text) 
02.
     
03.
    s = Text 
04.
     
05.
    For i = 1 To Len(s) 
06.
        c = Mid(s, i, 1) 
07.
        Select Case c 
08.
            Case "0","1","2","3","4","5","6","7","8","9" 
09.
            Case "A","B","C","D","E","F","G","H","I","J","K","L","M", _ 
10.
                 "N","O","P","Q","R","S","T","U","V","W","X","Y","Z" 
11.
            Case "a","b","c","d","e","f","g","h","i","j","k","l","m", _ 
12.
                 "n","o","p","q","r","s","t","u","v","w","x","y","z" 
13.
            Case Else 
14.
                s = Replace(s, c, "_") 
15.
        End Select 
16.
    Next 
17.
     
18.
    ReplaceSpecialChar = s 
19.
End Function
Oder zwecks Wartungsfreundlichkeit doch die Sonderzeichen.Txt anpassen. Du hast die Freie Auswahl

Gruß Dieter
Bitte warten ..
Mitglied: 82312
26.11.2009 um 08:30 Uhr
Vielen Dank für deinen freundlichen Support. Damit sollte das Problem behoben sein.

Danke, Danke, Danke...
Bitte warten ..
Mitglied: 76109
26.11.2009 um 10:11 Uhr
Hallo Max!

Gern geschehen

Gruß Dieter
Bitte warten ..
Mitglied: 82312
26.11.2009 um 11:41 Uhr
Ich habe das Script jetzt auf meine Bedürfnisse angepasst. Ich poste es einfach mal:

01.
'ReplaceSpecialSings,vbs 
02.
 
03.
sSonder = InputBox("Please define the SpecialSigns.txt:","ReplaceSpecialSigns","PFAD") 
04.
sFolder = InputBox("Please define the Folder where everything should be replaced:","ReplaceSpecialSigns","PFAD") 
05.
 
06.
Set oFSO = CreateObject("Scripting.FileSystemObject") 
07.
Set oSonder = oFSO.OpenTextFile(sSonder, 1) 
08.
 
09.
If Not oSonder.AtEndOfStream Then  
10.
     aSonder = Split(oSonder.ReadAll, vbCrLF) 
11.
Else 
12.
     MsgBox ("Sonderzeichendatei " & sSonder & " enthält keine Daten!") 
13.
End If 
14.
oSonder.Close 
15.
 
16.
ProcessFolder(oFSO.GetFolder(sFolder)) 
17.
Sub ProcessFolder(oFolder) 
18.
sNameOld = oFolder.Name 
19.
 
20.
sNameNew = ReplaceSpecialChars(sNameOld) 
21.
If Not oFSO.FolderExists(oFolder.ParentFolder & "\" & sNameNew) Then 
22.
    oFolder.Name = sNameNew 
23.
Else 
24.
    If sNameOld <> sNameNew Then oProtokoll.WriteLine oFolder.Path 
25.
End If 
26.
 
27.
For Each oFile In oFolder.Files 
28.
    sNameOld = Left(oFile.Name, InStrRev(oFile.Name, ".") - 1) 
29.
    sType = Mid(oFile.Name, InStrRev(oFile.Name, ".")) 
30.
 
31.
    sNameNew = ReplaceSpecialChars(sNameOld) 
32.
    If Not oFSO.FileExists(oFile.ParentFolder & "\" & sNameNew & sType) Then 
33.
        oFile.Name = sNameNew & sType 
34.
    End If 
35.
     
36.
    Next 
37.
 
38.
For Each oSubFolder In oFolder.SubFolders 
39.
    ProcessFolder(oSubFolder) 
40.
Next 
41.
End Sub 
42.
 
43.
Function ReplaceSpecialChars(sOld) 
44.
sTemp = sOld 
45.
For Each sLine In aSonder 
46.
    aChars = Split(sLine, ",") 
47.
    For i = 1 To UBound(aChars) 
48.
        sTemp = Replace(sTemp, aChars(i), aChars(0)) 
49.
    Next 
50.
Next 
51.
ReplaceSpecialChars = sTemp 
52.
End Function 
53.
MsgBox "Finished...",64,"...---'''COMPLETED'''---..."
zusätzlich benötigt man die Datei mit den Sonderzeichen die ersetz werden sollen.
Bitte warten ..
Mitglied: 76109
26.11.2009 um 12:09 Uhr
Hallo baeks1986!

Schön, dass Du den Code nochmal komplett gepostet hast

Die Zeile 12 könntest Du allerdings noch entfernen, da die gleiche Anweisung in Zeile 15 steht und die Datei unabhängig von True/False schließt

Gruß Dieter
Bitte warten ..
Mitglied: 82312
26.11.2009 um 15:53 Uhr
Oh, ja danke. Wird gemacht...

Wenn du Lust und Zeit hast würde ich gerne weiter an dem Script arbeiten. Ich soll diesen Script jetzt noch eweitern auf:

1. die Datei und Ordnernamen dürfen nicht länger als 240 Zeichen sein. (Habs schon geschafft das ende abzuschneiden, aber dann ist die Endung ja immer mit weg, und das will ja keiner also müsste ich das irgendwie von vorne abschneiden.

2. Sollen jetzt alle Files die größer als 25 MB sind in einen gesonderten Ordner geschoben werden, der aber die selben Ordnernamen beinhaltet wie die wo er vorher drin war...Ich weis, ist schlecht erklärt aber ich versuche es mal anhand eines Beispiels.

Ordner1
|_ Ordner2
|_Ordner3
|_hier liegen die 25MB+ Files
|_außerdem liegen hier noch enttliche andere Files


Jetzt soll die 25MB+ Datei so verschoben werden:

Ordner1
|_ Ordner2
|_Ordner3
|_ettliche andere Files aber KEINE File 25MB+


KopieOrdner1
|_KopieOrdner2
|_KopieOrdner3
|_hier liegen jetzt die 25MB+ Files aber KEINE anderen

Ist das so verständlich?

Für 1. habe ich gedacht man könnte das irgéndwie mit InStr() oder Len() Pos() Left() oder so lösen, bin aber bis jetzt nicht auf den richtigen Pfad gekommen.

Für 2. habe ich an ein Select Case gedacht mit GetFile.Size aber meine großes Problem ist dann die Ordner so wie oben angegeben zu erstellen.

Hast du/ihr da eine Idee?


Gruss,
Max
Bitte warten ..
Mitglied: 76109
26.11.2009 um 21:08 Uhr
Hallo baeks1986!

In Deinem Code Zeile 27 hast Du ja bereits eine Zerlegung des Dateinamens. Z.B. Datei = MeineDatei.Xyz
01.
For Each oFile In oFolder.Files 
02.
    sNameOld = Left(oFile.Name, InStrRev(oFile.Name, ".") - 1)    '= MeineDatei 
03.
    sType = Mid(oFile.Name, InStrRev(oFile.Name, "."))            '= Xyz 
04.
Next
Das kann man entsprechend erweitern z.B. Datei-Pfad = X:\Test1\Test2\Datei.Xyz
01.
For Each oFile In oFolder.Files 
02.
    sSize = oFile.Size                               '= Size in Byte 
03.
    sPath = oFile.Path                               '= X:\Test1\Test2\Datei.Xyz 
04.
    sFolder1 = oFolder.Path                          '= X:\Test1\Test2 
05.
    sFolder2 = oFolder.ParentFolder                  '= X:\Test1 
06.
    sFolder3 = oFolder.Name                          '= Test2 
07.
    sFile = oFile.Name                               '= Datei.Xyz 
08.
    sName = oFso.GetBaseName(sPath)                  '= Datei 
09.
    sType = oFso.GetExtensionName(sPath)             '= Xyz 
10.
 
11.
   'Weitere Funktionen 
12.
    nFolder = sFolder2 & "\Kopie" & sFolder3         '= X:\Test1\KopieTest2 
13.
    nPath = oFso.BuildPath(nFolder, sFile)           '= X:\Test1\KopieTest2\Datei.Xyz 
14.
     
15.
    If sSize > MaxSize Then                          'Test Size 
16.
        If Not oFso.FolderExists(nFolder) Then       'Test Folder Exists 
17.
            oFso.CreateFolder (nFolder)              'Create Kopie-Folder 
18.
        End If 
19.
        oFso.MoveFile sPath, nPath                   'Move File 
20.
    End If 
21.
Next
Das sollte Dir weiterhelfen

Gruß Dieter
Bitte warten ..
Mitglied: 82312
27.11.2009 um 12:23 Uhr
Ja das hilft auf jedenfall

Mein Problem ist nur, dass die Pfade ALLE dynamisch sind, dieser Script soll bei übernahme von anderen Firmen und eingliederung in unser Netzwerk laufen...
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Suchen ersetzen mit Sonderzeichen
gelöst Frage von GNLen1Batch & Shell2 Kommentare

Hallo zusammen. Ich habe einen Suchen /Ersetzen Code aus diesem Forum genommen. In einer Datei wird nach bestimmten Begriffen ...

Ubuntu

Ubuntu - Sonderzeichen aus Dateinamen entfernen

gelöst Frage von HenereUbuntu3 Kommentare

Servus zusammen, ich habe hier eine Fotosammlung auf nem Webserver mit root-Zugriff liegen. Ich würde gerne rekursiv die Dateien ...

Batch & Shell

Suchen und Ersetzen mit Sonderzeichen

gelöst Frage von snowdreamBatch & Shell6 Kommentare

Hallo zusammen, ich brauche mal wieder eure Hilfe. Ich hab hier im Forum schon einiges gelernt und auch schon ...

Microsoft

Suche und Ersetzen im Dateinamen mit Wildcard?

gelöst Frage von GottfriedKernMicrosoft5 Kommentare

Ich suche ein Programm, dass Dateinamen durchsucht und mittels Platzhalter ersetzen kann. Beispiel: toller - sound (2002).mp3 soll in ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 1 StundeErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 3 StundenWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgborn vor 3 StundenMicrosoft3 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 2 TagenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Heiß diskutierte Inhalte
Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1025 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Firewall
RB2011 Firewall Rule eine bestimmte Mac oder IP Adresse nicht zu blockieren
Frage von lightmanFirewall15 Kommentare

Hallo liebes Forum mit ihren Spezialisten. Ich habe meine Firewall so konfiguriert das kein Endgerät ohne meine Speziellen Erlaubnis ...

Humor (lol)
Was könnte man mit einem Server machen? Idee gesucht
Frage von 2SeitenHumor (lol)15 Kommentare

Hey Zusammen Ich habe einen alten HP G2 Rackserver zu Hause rumliegen. 28GB Ram, 1xAMD Prozi mit etwa 2GHz. ...

Server-Hardware
Server für Exchange 2016, Kaufberatung
Frage von MazenauerServer-Hardware10 Kommentare

Guten Tag werte Gemeinde, Vorab: Ich dachte es gab mal einen separaten Bereich für solche Anfragen, habe ich leider ...