返回列表 发帖

[文件操作] 【已解决】批处理查找C盘游戏存档并复制到d盘

本帖最后由 xiaoyao202 于 2022-4-20 21:11 编辑

求助大佬。
游戏存档后缀.sav 例如存档文件在C:\Users\Administrator\AppData\Local\SniperElite4\PC_ProfileSaves\76561197993333907下面或者C:\ProgramData\Tom Clancy's Ghost Recon Wildlands\UserData下面。我需要复制SniperElite4文件夹或Tom Clancy's Ghost Recon Wildlands文件夹到其他盘,并输出txt、
谢谢!!

回复 29# Batcher


    非常感谢大佬

TOP

回复 28# xiaoyao202
@echo off
chcp 65001
REM 设置备份到哪个文件夹
set "DstFolder=D:\Test"
REM 设置截取路径后的游戏目录列表
set "LogOutput=D:\Test\GameList.txt"
REM 设置游戏存档路径
set "Folder_1=%userprofile%\AppData\Roaming"
set "Folder_2=%userprofile%\AppData\Local"
set "Folder_3=%allusersprofile%"
set "Folder_4=%userprofile%\Documents"
set "LogTemp=%temp%\GameFolder.txt"
type nul >"%LogTemp%"
type nul >"%LogOutput%"
for %%a in ("%Folder_1%","%Folder_2%","%Folder_3%","%Folder_4%") do (
    echo 正在处理文件夹 %%a
    for /f "delims=" %%b in ('dir /b /s /a-d "%%a\*.sav"') do (
        >>"%LogTemp%" echo %%b
    )
)
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('type "%LogTemp%"') do (
    set "File=%%i"
    if "!File:%userprofile%\AppData\=!" neq "%%i" (
        for /f "tokens=1-6 delims=\" %%a in ("%%i") do (
            if not defined %%a\%%b\%%c\%%d\%%e\%%f (
                >>%LogOutput% echo %%a\%%b\%%c\%%d\%%e\%%f
                xcopy /e /y "%%a\%%b\%%c\%%d\%%e\%%f" "%DstFolder%\%%f\"
                set "%%a\%%b\%%c\%%d\%%e\%%f=1"
            )
        )
    ) else if "!File:%allusersprofile%\=!" neq "%%i" (
        for /f "tokens=1-3 delims=\" %%a in ("%%i") do (
            if not defined %%a\%%b\%%c (
                >>%LogOutput% echo %%a\%%b\%%c
                xcopy /e /y "%%a\%%b\%%c" "%DstFolder%\%%c\"
                set "%%a\%%b\%%c=1"
            )
        )
    ) else if "!File:%userprofile%\Documents\=!" neq "%%i" (
        for /f "tokens=1-5 delims=\" %%a in ("%%i") do (
            if not defined %%a\%%b\%%c\%%d\%%e (
                >>%LogOutput% echo %%a\%%b\%%c\%%d\%%e
                xcopy /e /y "%%a\%%b\%%c\%%d\%%e" "%DstFolder%\%%e\"
                set "%%a\%%b\%%c\%%d\%%e=1"
            )
        )
    )
)
endlocalCOPY
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 xiaoyao202 于 2022-4-20 21:02 编辑

回复 27# Batcher


    谢谢大佬。测试可以用。能不能输出截取路径后的txt。不然不知道文件夹属于那个位置

TOP

回复 26# xiaoyao202


test_3.bat 另存为UTF-8编码
@echo off
chcp 65001
REM 设置备份到哪个文件夹
set "DstFolder=D:\Test"
REM 设置游戏存档路径
set "Folder_1=%userprofile%\AppData\Roaming"
set "Folder_2=%userprofile%\AppData\Local"
set "Folder_3=%allusersprofile%"
set "Folder_4=%userprofile%\Documents"
set "LogFile=%temp%\GameFolder.txt"
type nul >"%LogFile%"
for %%a in ("%Folder_1%","%Folder_2%","%Folder_3%","%Folder_4%") do (
    echo 正在处理文件夹 %%a
    for /f "delims=" %%b in ('dir /b /s /a-d "%%a\*.sav"') do (
        >>"%LogFile%" echo %%b
    )
)
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('type "%LogFile%"') do (
    set "File=%%i"
    if "!File:%userprofile%\AppData\=!" neq "%%i" (
        for /f "tokens=1-6 delims=\" %%a in ("%%i") do (
            if not defined %%a\%%b\%%c\%%d\%%e\%%f (
                xcopy /e /y "%%a\%%b\%%c\%%d\%%e\%%f" "%DstFolder%\%%f\"
                set "%%a\%%b\%%c\%%d\%%e\%%f=1"
            )
        )
    ) else if "!File:%allusersprofile%\=!" neq "%%i" (
        for /f "tokens=1-3 delims=\" %%a in ("%%i") do (
            if not defined %%a\%%b\%%c (
                xcopy /e /y "%%a\%%b\%%c" "%DstFolder%\%%c\"
                set "%%a\%%b\%%c=1"
            )
        )
    ) else if "!File:%userprofile%\Documents\=!" neq "%%i" (
        for /f "tokens=1-5 delims=\" %%a in ("%%i") do (
            if not defined %%a\%%b\%%c\%%d\%%e (
                xcopy /e /y "%%a\%%b\%%c\%%d\%%e" "%DstFolder%\%%e\"
                set "%%a\%%b\%%c\%%d\%%e=1"
            )
        )
    )
)
endlocalCOPY
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 xiaoyao202 于 2022-4-20 17:50 编辑

回复 25# Batcher
谢谢大佬。测试没问题。但是2个批处理能合并一起吗。读取完1.txt然后删除。输出游戏存档路径的txt。也就是截取后的路径

TOP

回复 24# xiaoyao202


把你的1.txt和下面这个test_2.bat放在同一个目录下
test_2.bat 保存为UTF-8编码(为了跟1.txt保持一致):
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
@echo off
chcp 65001
REM 设置备份到哪个文件夹
set "DstFolder=D:\Test"
cd /d "%~dp0"
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('type "1.txt"') do (
    set "File=%%i"
    if "!File:%userprofile%\AppData\=!" neq "%%i" (
        for /f "tokens=1-6 delims=\" %%a in ("%%i") do (
            if not defined %%a\%%b\%%c\%%d\%%e\%%f (
                xcopy /e /y "%%a\%%b\%%c\%%d\%%e\%%f" "%DstFolder%\%%f\"
                set "%%a\%%b\%%c\%%d\%%e\%%f=1"
            )
        )
    ) else if "!File:%allusersprofile%\=!" neq "%%i" (
        for /f "tokens=1-3 delims=\" %%a in ("%%i") do (
            if not defined %%a\%%b\%%c (
                xcopy /e /y "%%a\%%b\%%c" "%DstFolder%\%%c\"
                set "%%a\%%b\%%c=1"
            )
        )
    ) else if "!File:%userprofile%\Documents\=!" neq "%%i" (
        for /f "tokens=1-5 delims=\" %%a in ("%%i") do (
            if not defined %%a\%%b\%%c\%%d\%%e (
                xcopy /e /y "%%a\%%b\%%c\%%d\%%e" "%DstFolder%\%%e\"
                set "%%a\%%b\%%c\%%d\%%e=1"
            )
        )
    )
)
endlocalCOPY
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 23# Batcher
https://wwi.lanzoup.com/i5g1J03hiqvg
蓝奏盘

TOP

回复 21# xiaoyao202


    请把这个txt文件上传到网盘我试试
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 20# yakeyun


    谢谢大佬。但是需要的这种不是sav文件。文件夹是存档游戏的名字。sav文件在这些文件夹的子目录里面

TOP

本帖最后由 xiaoyao202 于 2022-4-20 02:42 编辑

回复 18# Batcher


    测试了没问题。下一步读取sav文件路径然后截取
也就是需要复制roaming和local后面的文件夹

TOP

回复 18# Batcher


19楼已经用if过滤了非.sav的文件项目,但是拷贝会多一些其它扩展名文件。

TOP

本帖最后由 yakeyun 于 2022-4-20 00:57 编辑

回复 10# xiaoyao202
@echo off&setlocal enabledelayedexpansion
if not exist D:\存档\ (md D:\存档)
if not exist D:\存档\数据\ (md D:\存档\数据)
for /f "delims=" %%a in ('dir /a /s /b "C:\ProgramData\*.sav" ') do (
set savkz1=%%~xa
set sav1=%%~dpa
echo !sav1!
if !savkz1!==.sav (
echo !sav1! >>D:\存档\游戏存档.log
copy /y "!sav1!" "D:\存档\数据\"
)
)
for /f "delims=" %%b in ('dir /a /s /b "C:\Users\Administrator\AppData\Local\*.sav" ') do (
set savkz2=%%~xb
set sav2=%%~dpb
echo !sav2!
if !savkz2!==.sav (
echo !sav2! >>D:\存档\游戏存档.log
copy /y "!sav2!" "D:\存档\数据\"
)
)
echo 游戏存档已经备份完毕,3秒后本窗口将自动关闭!
timeout -t 3 >nul
exitCOPY

TOP

回复 14# xiaoyao202


就按照你的思路,先完成第一步,你看看获取到txt文本内容是否正确:
@echo off
cd /d "%~dp0"
set "Folder_1=%userprofile%\AppData\Roaming"
set "Folder_2=%userprofile%\AppData\Local"
set "Folder_3=%allusersprofile%"
set "Folder_4=%userprofile%\Documents"
set "LogFile=D:\1.txt"
type nul >"%LogFile%"
for %%a in ("%Folder_1%","%Folder_2%","%Folder_3%","%Folder_4%") do (
    echo 正在处理文件夹 %%a
    for /f "delims=" %%b in ('dir /b /s /a-d "%%a\*.sav"') do (
        >>"%LogFile%" echo %%b
    )
)COPY
然后下一步再继续讨论到底获取哪一级文件夹
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 15# Batcher

Tom Clancy's Ghost Recon Wildlands 就在%ALLUSERSPROFILE%(即C:\ProgramData)下面啊

TOP

返回列表