[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 求助:移动文件至指定目录

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

返回列表