Code: Select all
Const FOR_READING = 1
Const sScriptName = "Move files 2 parent folders"
If WScript.arguments.Count = 0 Then
MsgBox "Script file for Total Commander %L processing:" & vbCrLf &_
"Move selected files into parent folder" & vbCrLf &_
"Usage:" & vbCrLf &_
vbCrLf &_
" Command : MoveFiles2ParentFolders.vbs" & vbCrLf &_
" Parameters : ""%L"" [opt]" & vbCrLf &_
" Tooltip : move all marked files into parent folder (..\)" & vbCrLf &_
vbCrLf &_
"[opt] = -O Overwrite existing files" & vbCrLf &_
"[opt] = -A Ask before overwriting existing files" & vbCrLf &_
"[opt] = -S Secure: do not overwrite any existing files" & vbCrLf &_
vbCrLf &_
"default opt is -A", vbOKOnly, sScriptName
Else
sFileList = WScript.arguments.Item( 0 )
sOpt = "-a"
bOverwrite = true
bAskForOverwrite = true
If WScript.arguments.Count > 1 Then
sOpt = lcase (WScript.arguments.Item( 1 ))
End if
Select Case sOpt
Case "-o"
bOverwrite = true
bAskForOverwrite = false
Case "-a"
bOverwrite = true
bAskForOverwrite = true
Case "-s"
bOverwrite = false
bAskForOverwrite = false
End Select
Set oFSO = CreateObject( "Scripting.FileSystemObject" )
If oFSO.FileExists(sFileList) Then
Set oTextStream = oFSO.OpenTextFile( sFileList, FOR_READING )
Do Until oTextStream.AtEndOfStream
sFilePathName = oTextStream.ReadLine
If oFSO.FileExists( sFilePathName ) Then
sPath = oFSO.GetParentFolderName( sFilePathName )
sName = oFSO.GetBaseName( sFilePathName )
sExtension = oFSO.GetExtensionName( sFilePathName )
sNewFilePathName = sPath & "\..\" & sName & "." & sExtension
If oFSO.GetAbsolutePathName(sFilePathName) = oFSO.GetAbsolutePathName(sNewFilePathName) Then
If Not bOverwrite Then
MsgBox "Source and Destination is identical!" & vbCrLf &_
" " & oFSO.GetAbsolutePathName(sNewFilePathName) & vbCrLf &_
"Skipped!", vbExclamation, sScriptName
End If
ElseIf Not oFSO.FileExists( sNewFilePathName ) Then
oFSO.MoveFile sFilePathName, sNewFilePathName
ElseIf bAskForOverwrite And bOverwrite Then
sQuestion = "File Exists!" & vbCrLf &_
" " & sNewFilePathName &vbCrLf &_
"Overwrite?"
answer = MsgBox ( sQuestion, vbYesNoCancel + vbQuestion, sScriptName )
If answer = vbCancel Then
Exit Do
ElseIf answer = vbYes Then
oFSO.DeleteFile sNewFilePathName
oFSO.MoveFile sFilePathName, sNewFilePathName
answer = MsgBox ( "Do You want to overwrite ALL files?", vbYesNo + vbQuestion, sScriptName )
If answer = vbYes Then
bAskForOverwrite = false
End If
End If
ElseIf bOverwrite Then
oFSO.DeleteFile sNewFilePathName
oFSO.MoveFile sFilePathName, sNewFilePathName
Else
MsgBox "Destination file exists (skipped)!:" & vbCrLf &_
" " & sNewFilePathName, vbOKOnly, sScriptName
End If
End If
Loop
oTextStream.Close
Else
MsgBox "Input file list " & vbCrLf &_
" " & sFileList & vbCrLf &_
" not found.", vbExclamation, sScriptName
End If
End If
- als MoveFiles2ParentFolders.vbs abspeichern
- MoveFiles2ParentFolders.vbs auf eine leere Stelle der Buttonbar ziehen
- Button bearbeiten, und Parameter "%L" ergänzen
- Wer auf Nummer Sicher gehen will, der setzt den "Parameter: "%L" -A", und wird dann jedesmal gefragt ob ein bereits bestehendes File überschrieben werden soll.
- Noch eine Nummer sicherer ist "Parameter: "%L" -S". Es wird dann nur angezeigt, das ein File überschrieben würde.
- Diejenigen die sich an aufpoppenden Dialogen stören, setzten "Parameter: "%L" -O", oder löschen einfach die richtigen zwei Drittel des Scriptcodes.

Mit freundlichem Gruß,
Holger
Edit: Fehlerbehandlung wenn Files im Rootverzeichnis selektiert sind.
Edit2: Default Opt auf -A geändert. Zusätzliche Abfrage Abbruch oder Alles überschreiben.
Edit3: "%L" anstelle von %L
Danke Dalai! Ich fall immer wieder darauf rein, weil ich auf allen meinen Rechnern TEMP=C:\Temp gesetzt habe.
