我想从命令行列出Vista中回收站中的文件。到目前为止,我有这个..
dir C:\$Recycle.Bin /s /b >> recyclebin.txt
没关系,我得到的输出就是这个..
C:\ $ RECYCLE.BIN \ S-1-5-21-931442927-344369455-2477061601-1000 \ $ I2H8K48.zip
C:\ $ RECYCLE.BIN \ S-1-5-21-931442927-344369455-2477061601-1000 \ $ IE94UAG.exe
C:\ $ RECYCLE.BIN \ S-1-5-21-931442927-344369455-2477061601-1000 \ $ IR4P99W.rar
C:\ $ RECYCLE.BIN \ S-1-5-21-931442927-344369455-2477061601-1000 \ $ R2H8K48.zip
C:\ $ RECYCLE.BIN \ S-1-5-21-931442927-344369455-2477061601-1000 \ $ RE94UAG.exe
C:\ $ RECYCLE.BIN \ S-1-5-21-931442927-344369455-2477061601-1000 \ $ RR4P99W.rar
我的回收站中只有3个文件名为auto-it-v3-setup.exe,fcleanerportable.rar和Reinstall.rar。
是否有将这些名称放入txt文件列表中,而不是上面那些代号为命的文件?
答案 0 :(得分:4)
使用PowerShell按原始位置列出回收站中的文件(另存为file.ps1,删除之前的换行符,以便只获得两行):
(New-Object -ComObject Shell.Application).NameSpace(0x0a).Items()
|select @{n="OriginalLocation";e={$_.ExtendedProperty("{9B174B33-40FF-11D2-A27E-00C04FC30871} 2")}},Name
| export-csv -delimiter "\" -path C:\Users\UserName\Desktop\recycleBinFiles.txt -NoTypeInformation
(gc C:\Users\UserName\Desktop\recycleBinFiles.txt | select -Skip 1)
| % {$_.Replace('"','')}
| set-content C:\Users\UserName\Desktop\recycleBinFiles.txt
答案 1 :(得分:1)
我找到了这个脚本here。 并使用我的批处理文件中的此命令来调用它
cscript recyclebin.vbs >> "logs\recyclebin.txt"
将以下内容另存为recyclebin.vbs
:
Option Explicit
Dim g_objWshShell, g_objFSO, g_sLogFile, g_objWshNetwork, g_sScriptName, g_sComputerName, g_sUserName
Dim g_sVer, g_objLogFile, g_sLogDir
'Setup main variables and objects
Set g_objWshShell = WScript.CreateObject("WScript.Shell") 'Create a Shell Object
Set g_objFSO = CreateObject("Scripting.FileSystemObject") 'create a File System Object
Set g_objWshNetwork = WScript.CreateObject("WScript.Network") 'Create Network Object
g_sComputerName = g_objWshNetwork.Computername 'Gets machine Computer name
g_sUserName = g_objWshNetwork.UserName 'Gets logged-on username
g_sScriptName=UCase(WScript.ScriptName) '*** Name of the script
' *** START LogFile Information - use Delete or Append info below; don't use both ***
Const FORREADING = 1, FORWRITING = 2, FORAPPENDING = 8 'Setup constants for writing, appending, etc
g_sLogDir = "C:\TEMP"
If Not (g_objFSO.FolderExists(g_sLogDir)) Then
g_objFSO.CreateFolder(g_sLogDir)
End If
g_sLogFile = g_sLogDir & "\" & Left(g_sScriptName, Len(g_sScriptName) - 3) & "LOG" 'Makes log file the SCRIPTNAME.Log
g_sVer = "1.0"
'To delete a logfile and create a new one each time script is ran
If g_objFSO.FileExists(g_sLogFile) Then
g_objFSO.DeleteFile(g_sLogFile) 'Delete logfile if it exists.
End If
Set g_objLogFile = g_objFSO.CreateTextFile(g_sLogFile, FORWRITING) 'Setup the logfile for writing
Call Main()
Call ExitScript()
'Start main script HERE ***
Sub Main()
Dim objRecycleBin, objFolderItems, objItem, strSpecialFolderName
strSpecialFolderName = "Recycle Bin"
'Call WriteLine("Starting " & g_sScriptName & " at " & Date & " " & Time, g_objLogFile)
Set objRecycleBin = GetSpecialFolderObject(strSpecialFolderName) 'Get Special Folder based upon input name
Set objFolderItems = objRecycleBin.Items() 'Get items within Recycle Bin
For Each objItem In objFolderItems 'Delete all items within Special Folder
If (objItem.Type = "File Folder") Then 'Check for file type
g_objFSO.DeleteFolder(objItem.Path) 'Delete Folders
Else
g_objFSO.DeleteFile(objItem.Path) 'Delete Files
End If
WScript.Echo "Deleted " & objItem.Name
Next
End Sub
'*-*-*-*-*- Start Subroutines here *-*-*-*-*-
'Returns SpecialFolder based upon name of folder
Function GetSpecialFolderObject(NameOfFolder)
Dim objShellApp, i, objSpecialFolder
Set objShellApp = CreateObject("Shell.Application")
On Error Resume Next
For i=0 To 40 '40 is highest value for special folders
Set objSpecialFolder = objShellApp.NameSpace(i)
If (StrComp(objSpecialFolder.Title, NameOfFolder, vbTextCompare) = 0) Then
Set GetSpecialFolderObject = objSpecialFolder
Exit For
End If
Next
Err.Clear
End Function
'Closes logfile and exits script
Sub ExitScript()
'Call WriteLine(Date & " " & Time & "; Completed " & g_sScriptName, g_objLogFile)
If IsObject(g_objLogFile) Then
g_objLogFile.Close
End If
Wscript.Quit
End Sub
Sub EndOnError(sErrorString)
WScript.Echo sErrorString & vbCrLf & "Check " & Chr(34) & g_sLogFile & Chr(34) & " for details"
Call WriteLine (sErrorString, g_objLogFile)
WScript.Quit()
End Sub
'Shows usage if input is wrong
Sub ShowUsage()
WScript.Echo g_sScriptName & " v" & g_sVer & " Empties Recycle Bin for logged on user" & vbCrLf _
& vbCrLf & "USAGE: [CSCRIPT] " & g_sScriptName
WScript.Quit
End Sub
'Writes to log
Sub WriteLine(ByVal strMessage, ByVal objFile)
On Error Resume Next
If IsObject(objFile) Then 'objFile should be a file object
objFile.WriteLine strMessage
Else
Call Wscript.Echo(strMessage)
End If
End Sub