Command line 命令行移动未命名文件夹的内容

Command line 命令行移动未命名文件夹的内容,command-line,batch-file,command-line-arguments,command-prompt,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" ,但它会将其所有内容移动到根目录,而不是删除它。如何做到

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

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

,但它会将其所有内容移动到根目录,而不是删除它。如何做到这一点?

这可能适合您:

for /d %%i in (*) do echo %%~i |findstr "ECHO is" >nul&& move "%%~i" ELSEWHERE
这可能会将文件夹
移动到
其他位置



这可能会删除文件夹

,因此最好使用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版本,必须先安装。PowerShell包含在该软件包中。

这可能有助于:

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

它没有显示一个y/n问题,让用户决定这是他想要操作的文件夹(移动还是删除)。它也没有移动任何文件。这是输出,它可能取决于本地设置。请在命令提示下显示
echo
的输出。希望您没有文件夹
echo is
:)VBScript给出以下错误。PowerShell在Windows XP上工作吗?输入错误。变量名应该是
fldr
,而不仅仅是
f
。如果先安装Windows管理框架,PowerShell版本将在WinXP上运行。请参阅更新的答案。抱歉-这是航空代码(未测试)。我更正了其中的一个错误,请再试一次。
@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="
)