1

Я пытаюсь сделать пакет, который исправляет мой флеш-накопитель от заражения вирусами быстрого доступа. Я хочу переместить файлы из неназванной папки (Alt + 255) в корневую директорию моего флеш-накопителя, что трудно, так как я не могу сделать это с коротким именем папки, потому что это переменная (один раз она это 00A0 ~ 1, а другой - 9DEC ~ 1), поэтому я собираюсь сделать команду, которая проходит через папки и запрашивает у пользователя, чтобы решить, является ли это неуправляемой папкой или нет так («« это папка? (Y/N)) похож на выходе этой команды:Командная строка для перемещения содержимого неназванной папки

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

, но он перемещает все ее содержимое в корневой каталог не удалить его. Как это сделать?

ответ

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)) 
    } 
} 

Оба решения проверить исходную папку для имен папок не начиная с алфавитно-цифровым символом, подчеркивание или дефис, подсказать пользователь, и (на подтверждение) переместите эту папку в папку карантина.

Если вы хотите использовать версию PowerShell в Windows XP, вам необходимо сначала установить Windows Management Framework. PowerShell включен в этот пакет.

+0

VBScript дает мне следующее ошибка http://imagebin.org/263576. Работает ли PowerShell в Windows XP? –

+0

Типо. Имя переменной должно было быть 'fldr', а не просто' f'. Версия PowerShell работает на WinXP, если вы сначала установите Windows Management Framework. См. Обновленный ответ. –

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" 

Это может удалить папку .

+0

Он не показал г/п вопрос, чтобы позволить пользователю решить, если это папка он хочет манипулировать (перемещение или удаление). Он также не перемещал файлы. Вот результат: http://imagebin.org/263569 –

+0

Это может зависеть от локальных настроек. Пожалуйста, покажите вывод 'echo' в командной строке. – Endoro

+0

Вот результат эха на моей машине http://imagebin.org/263570 –

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=" 
) 
+0

Это дает мне следующее .. http://imagebin.org/263575 –

+0

Извините - это код аэропорта (непроверенный). Я исправил ошибку, поэтому попробуйте еще раз. – foxidrive

Смежные вопросы