用于移动未命名文件夹内容的命令行

时间:2013-07-06 08:11:32

标签: command-line batch-file command-line-arguments command-prompt

我正在尝试从快捷方式病毒感染修复我的闪存驱动器的批处理。我想将文件从一个未命名的文件夹(Alt + 255)移动到我的闪存驱动器的根目录,有什么困难,我不能用文件夹的短名称来做,因为它是可变的(一次它是00A0~1另一个是9DEC~1)所以我正在考虑制作一个循环文件​​夹的命令,然后提示他们让用户判断这是不是没文件的文件夹还是没有这样(“”是文件夹? (Y / N))类似于此命令的输出:

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

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

3 个答案:

答案 0 :(得分: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" 

这可能会删除文件夹

答案 1 :(得分:1)

您可能最好使用VBScript或PowerShell。

的VBScript:

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

的PowerShell:

$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包含在该软件包中。

答案 2 :(得分: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="
)