1

我正在尝试做一批修复我的闪存驱动器免受快捷方式病毒感染的问题。我想将文件从一个未命名的文件夹 (Alt+255) 移动到我的闪存驱动器的根目录,困难的是我不能用文件夹的短名称来做到这一点,因为它是可变的(有一次是 00A0~1 另一个是 9DEC~1) 所以我正在考虑创建一个循环遍历文件夹的命令,并提示用户确定这是未命名的文件夹还是类似的文件夹(“”是文件夹吗? (Y/N)) 类似于此命令的输出:

for /d %d in (*) do rmdir /s "%d"

,但它会将它的所有内容移动到根目录而不是删除它。怎么做?

4

3 回答 3

1

这可能对您有用:

for /d %%i in (*) do echo %%~i |findstr "ECHO is" >nul&& move "%%~i" ELSEWHERE

这可能会将文件夹移动 ELSEWHERE.


for /d %%i in (*) do echo %%~i |findstr "ECHO is" >nul&& rd "%%~i" 

这可能会删除文件夹

于 2013-07-06T08:28:42.410 回答
1

为此,您最好使用 VBScript 或 PowerShell。

VB脚本:

Set fso = CreateObject("Scripting.FileSystemObject")

source     = "K:\"
quarantine = "C:\quarantine"

Set re = New RegExp
re.Pattern = "^[^a-z0-9_-]"
re.IgnoreCase = True

For Each fldr In fso.GetFolder(source).SubFolders
  If re.Test(fldr.Name) Then
    answer = MsgBox("Move " & fldr.Path & "'?", vbYesNo, "Folder Check")
    If answer = vbYes Then fldr.Move quarantine & "\"
  End If
Next

电源外壳:

$source     = "K:\"
$quarantine = "C:\quarantine"

Get-ChildItem $source -Force | ? {
  $_.PSIsContainer -and $_.Name -match '^[^a-z0-9_-]'
} | % {
  $answer = Read-Host "Move $($_.FullName)? [Y/n]"
  if ( $answer.Length -eq 0 -or $answer[0] -eq "y" ) {
    $_.MoveTo((Join-Path $quarantine $_.Name))
  }
}

这两种解决方案都会检查源文件夹中是否有不以字母数字字符、下划线或连字符开头的文件夹名称,提示用户,然后(在确认后)将该文件夹移动到隔离文件夹。

如果要在 Windows XP 上使用 PowerShell 版本,则必须先安装Windows Management Framework。PowerShell 包含在该软件包中。

于 2013-07-06T09:25:26.327 回答
0

这可能会有所帮助:

@echo off
set "var="
for /f "delims=" %%a in ('dir /ad /b') do (
echo "%%a"
set /p "var=Is that it? press enter for no and Y for yes: "
  if defined var (
   attrib -h -s -r -a "%%a" /d
   move "%%a\*.*" \
 )
set "var="
)
于 2013-07-06T10:25:07.043 回答