返回列表 发帖

[文件操作] 【已解决】求助批处理移动文件至指定目录

本帖最后由 lj670 于 2024-11-23 17:20 编辑

文件夹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;
    }
}COPY
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 2# 77七


    运行完美,谢谢!

TOP

@echo off
rem 保存为ansi编码
cd /d "%~dp0"
set folder1=文件夹3
set folder2=文件夹4
(for /f "useback delims=" %%i in ("00.txt") do (
if exist "%folder1%\%%i.mp3" (
move "%folder1%\%%i.mp3" "%folder2%\" 1>nul
) else (
echo %%i
)
)) > "缺少.txt"
pauseCOPY
1

评分人数

    • lj670: 感谢分享技术 + 1
bat小白,请多指教!谢谢!

TOP

返回列表