- 帖子
- 31
- 积分
- 55
- 技术
- 0
- 捐助
- 0
- 注册时间
- 2023-3-23
|
文件夹3内有若干mp3文件,根据“00.txt”文本列出的多个mp3文件名(每首一行,没有后缀名),从文件夹3移动至文件夹4内,如果有没找到的文件则创建一个"缺少.txt"文本并记录,我有一个脚本如下,可以根据文本移动文件,但对缺少的文件不能准确记录,求助各位大佬,谢谢!
<# :
echo off&cls
rem 根据一个txt文本文件内列出的多个文件名,从一个指定文件夹里查找出相应的文件并剪切/移动到另一个文件夹里
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312'))))"
echo;%#% +%$%%$%/%_% %z%
pause
exit
#>
$txtfile="00.txt";
$oldfolder="C:\测试\3";
$newfolder="C:\测试\4";
if (-not (test-path -liter $txtfile)) {
write-host ('"'+$txtfile+'" not found');
exit;
};
if (-not (test-path -liter $oldfolder)) {
write-host ('"'+$oldfolder+'" not found');
exit;
};
if (-not (test-path -liter $newfolder)) {
[void](md $newfolder);
};
$dic = New-Object 'System.Collections.Generic.Dictionary[string,int]';
$text = [IO.File]::ReadAllLines($txtfile, [Text.Encoding]::GetEncoding('GB2312'));
for ($i = 0; $i -lt $text.count; $i++) {
$key = $text[$i].toLower();
if (-not $dic.ContainsKey($key)) {
$dic.Add($key, 0);
}
}
# 获取指定文件夹中的所有mp3文件信息
$filesInFolder = @(dir -liter $oldfolder -Filter "*.mp3" |? { $_ -is [System.IO.FileInfo] });
# 用于记录缺少的文件名
$missingFiles = @();
# 遍历00.txt中记录的文件名,检查是否在文件夹中有对应的mp3文件
foreach ($line in $text) {
$fileNameToCheck = $line.Trim();
$found = $false;
foreach ($file in $filesInFolder) {
if ($file.Name -eq $fileNameToCheck) {
$found = true;
break;
}
}
if (-not $found) {
$missingFiles += $fileNameToCheck;
}
}
# 如果存在缺少的文件,将其记录到11.txt中
if ($missingFiles.Count -gt 0) {
$missingFiles | Out-File -FilePath "11.txt"
}
# 移动找到的mp3文件到新文件夹
foreach ($file in $filesInFolder) {
if ($dic.ContainsKey($file.Name.ToLower())) {
write-host $file.FullName;
$newfile = $newfolder.trimend('\') + '\' + $file.Name;
move-item -liter $file.FullName $newfile;
}
} |
|