windows批处理脚本为目录中的每个文件创建文件夹,命名,然后将文件移动到该文件夹​​中

Hor*_*ein 1 windows batch

编码:

for %%X in ("C:\Info\AUGUST 2011\Checklists\DET1__*") do (echo %%X)
Run Code Online (Sandbox Code Playgroud)

列出我想要的文件的名称:

  1. 创建一个文件夹,文件名的其余部分(之后DET1__)作为文件夹的标题
  2. 将该文件移动到该特定文件夹中

我知道它不应该那么难,但我真的不熟悉使用 Windows 编写 shell 脚本,而且我无法在工作中访问 UNIX 样式的 shell。

Bac*_*its 7

这在 PowerShell 中大约容易一百倍,但这应该有效。可以在setlocal /?set /?和 中找到对正在发生的事情的更好解释for /?。Batch 不是一种好的语言,因此我们必须做诸如使用ENABLEDELAYEDEXPANSION和使用之类的事情,!FILE!而不是%FILE%防止批处理文件设置变量一次而永不更新它。要记住的一个关键是文件名和文件夹名不能相同。所以你不能同时拥有一个文件,一个文件夹fooC:\,例如。

我还没有真正测试过这些,所以请在做任何事情之前自己做。

@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
Run Code Online (Sandbox Code Playgroud)

PowerShell 版本:

$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
}
Run Code Online (Sandbox Code Playgroud)