代码:
for %%X in ("C:\Info\AUGUST 2011\Checklists\DET1__*") do (echo %%X)
列出我想要的文件的名称:
- 创建一个文件夹,将文件名的其余部分( 之后
DET1__
)作为文件夹的标题 - 将该文件移动到特定文件夹中
我知道这应该不太难,但我真的不熟悉使用 Windows 进行 shell 脚本编写,并且在工作中无法使用 UNIX 风格的 shell。
答案1
在 PowerShell 中,这大约容易一百倍,但这应该可行。有关发生的事情的更好解释可以在setlocal /?
、set /?
和中找到for /?
。批处理不是一种好的语言,因此我们必须使用ENABLEDELAYEDEXPANSION
和 使用!FILE!
而不是 来防止批处理文件设置一次变量后再也不更新它。要记住的一个关键是文件名和文件夹名不能相同。因此,例如,%FILE%
您不能同时拥有文件和文件夹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 版本:
$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
}
答案2
如果您愿意使用 powershell 而不是批处理脚本,您可以执行以下操作:
$files = get-childitem "C:\Info\AUGUST 2011\Checklists\DET1__*"
ForEach ($file in $files) {
$dirname = $file.fullname.replace("DET1__","")
New-Item -Path $dirname -type directory
Move-Item $file $dirname
}
根据 Windows 的版本,你可能默认安装了 powershell (Win7/Vista)。如果你使用的是 XP,那么你必须下载它来自 Windows 管理框架核心链接。
答案3
或者直接使用http://skwire.dcmembers.com/wb/pages/software/files-2-folder.php它会创建一个包含您选择的(资源管理器)文件的文件夹,或者每个文件一个文件夹(不带扩展名),然后将文件移动到里面。