Это примерно в сто раз проще в PowerShell, но это должно работать.  Более подробные объяснения того, что происходит, можно найти в setlocal /? set /? а for /? ,  Пакетный язык не является хорошим языком, поэтому мы должны делать такие вещи, как использование ENABLEDELAYEDEXPANSION и использование !FILE! вместо %FILE% чтобы пакетный файл не устанавливал переменные один раз и никогда не обновлял их.  Один ключ, который нужно помнить, состоит в том, что имена файлов и foldernames не могут быть одинаковыми.  Так что вы не можете иметь файл и папку foo в C:\ .
Я не проверял это на самом деле, поэтому, пожалуйста, сделайте это самостоятельно, прежде чем что-то делать.
@ECHO OFF
SETLOCAL
SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%X IN ("C:\Info\AUGUST 2011\Checklists\DET1__*") DO (
    SET FILEPATH=%~fX
    SET FILENAME=%~nxX
    SET TEMPFILE=%~fX.tmp
    MOVE "!FILEPATH!" "!TEMPFILE!"
    MKDIR "!FILEPATH!"
    MOVE "!TEMPFILE!" "!FILEPATH!\!FILENAME!"
)
ENDLOCAL
PowerShell verion:
$Files = Get-ChildItem -Path 'C:\Info\AUGUST 2011\Checklists\' -Filter 'DET1__*'
$Files | ForEach-Object {
    $FileFullName = $_.FullName
    $TempFileName = "$($FileFullName).tmp"
    $DestinationFileName = "$FileFullName\$($_.Name)"
    Move-Item $FileFullName $TempFileName
    New-Item -Path $FileFullName -ItemType Directory
    Move-Item $TempFileName $DestinationFileName
}