【问题标题】:Command line to move the contents of an unnamed folder用于移动未命名文件夹内容的命令行
【发布时间】:2013-07-06 21:33:36
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案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 包含在该软件包中。

    【讨论】:

    • VBScript 给了我以下错误imagebin.org/263576。 PowerShell 可以在 Windows XP 上运行吗?
    • 错字。变量名应该是fldr,而不仅仅是f。如果您先安装 Windows Management Framework,则 PowerShell 版本可在 WinXP 上运行。查看更新的答案。
    【解决方案2】:

    这可能对你有用:

    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" 
    

    这可能会删除文件夹

    【讨论】:

    • 它没有显示是/否问题让用户决定这是否是他想要操作(移动或删除)的文件夹。它也没有移动任何文件。这是输出imagebin.org/263569
    • 这可能取决于本地设置。请在命令提示符下显示echo 的输出。
    • 希望你没有文件夹ECHO is :)
    【解决方案3】:

    这可能会有所帮助:

    @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="
    )
    

    【讨论】:

    • 对不起 - 它是航空代码(未经测试)。我纠正了一个错误,所以再试一次。
    猜你喜欢
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多