标题: [文件操作] 【已解决】批处理查找C盘游戏存档并复制到d盘 [打印本页]
作者: xiaoyao202 时间: 2022-4-17 12:48 标题: 【已解决】批处理查找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、
谢谢!!
作者: Batcher 时间: 2022-4-17 13:06
回复 1# xiaoyao202 - @echo off
- cd /d "%~dp0"
- REM 设置备份到哪个文件夹
- set "DstFolder=D:\Test"
- if exist "C:\Users\Administrator\AppData\Local\SniperElite4\PC_ProfileSaves\76561197993333907\*.sav" (
- xcopy /e /y "C:\Users\Administrator\AppData\Local\SniperElite4" "%DstFolder%\SniperElite4\"
- )
- if exist "C:\ProgramData\Tom Clancy's Ghost Recon Wildlands\UserData\*.sav" (
- xcopy /e /y "C:\ProgramData\Tom Clancy's Ghost Recon Wildlands" "%DstFolder%\Tom Clancy's Ghost Recon Wildlands\"
- )
复制代码
作者: xiaoyao202 时间: 2022-4-17 13:28
本帖最后由 xiaoyao202 于 2022-4-17 13:29 编辑
回复 2# Batcher
谢谢。但是我是举个例子。主要是查找sav后缀的文件来判断游戏存档获取路径,然后截取路径C:\Users\Administrator\AppData\Local\SniperElite4复制SniperElite4这个文件夹。因为好多游戏存档。需要输出txt是来判断文件夹在那个位置。重装系统后可以存档复制过去
作者: Batcher 时间: 2022-4-17 17:20
回复 3# xiaoyao202 - @echo off
- cd /d "%~dp0"
- REM 设置备份到哪个文件夹
- set "DstFolder=D:\Test"
- REM 设置写入哪个文件
- set "DstFile=D:\1.txt"
- if exist "C:\Users\Administrator\AppData\Local\SniperElite4\PC_ProfileSaves\76561197993333907\*.sav" (
- xcopy /e /y "C:\Users\Administrator\AppData\Local\SniperElite4" "%DstFolder%\SniperElite4\"
- >"%DstFile%" echo C:\Users\Administrator\AppData\Local\SniperElite4
- )
- if exist "C:\ProgramData\Tom Clancy's Ghost Recon Wildlands\UserData\*.sav" (
- xcopy /e /y "C:\ProgramData\Tom Clancy's Ghost Recon Wildlands" "%DstFolder%\Tom Clancy's Ghost Recon Wildlands\"
- >"%DstFile%" echo C:\ProgramData\Tom Clancy's Ghost Recon Wildlands
- )
复制代码
作者: xiaoyao202 时间: 2022-4-17 19:12
回复 4# Batcher
谢谢大佬。可能我表达的还是不清楚。我的意思搜索C盘后缀sav的文件,然后获取文件路径。知道sav的文件是在SniperElite4这个文件夹三层目录中。我需要的是复制SniperElite4这个文件夹。C盘有很多存档文件像在SniperElite4文件夹下的。我只是举这个例子。
图片没法上传可能等级不够。
作者: Batcher 时间: 2022-4-17 19:48
回复 5# xiaoyao202
如需上传截图,请用图床:
http://bbs.bathome.net/thread-60985-1-1.html
如需上传附件,请用阿里云盘或百度网盘。
作者: xiaoyao202 时间: 2022-4-17 23:10
回复 6# Batcher
谢谢知道了
作者: xiaoyao202 时间: 2022-4-17 23:10
本帖最后由 xiaoyao202 于 2022-4-17 23:20 编辑
希望批处理查找C盘sav文件。然后判断文件全部路径。复制红框的文件夹到D盘。同时输出txt知道sav文件属于那个位置
作者: yakeyun 时间: 2022-4-18 00:41
回复 8# xiaoyao202
代码保存为ANSI格式- @echo off&setlocal enabledelayedexpansion
- cd /d "%~dp0"
- if not exist D:\存档\ (md D:\存档)
- if not exist D:\存档\数据\ (md D:\存档\数据)
- for /f "tokens=* delims=, " %%a in ('dir /a /s /b %ALLUSERSPROFILE%\*.sav') do set sav1=%%a
- for /f "tokens=* delims=, " %%b in ('dir /a /s /b %LOCALAPPDATA%\*.sav') do set sav2=%%b
- echo !sav1! >>D:\存档\游戏存档.log
- xcopy /e /y "!sav1!" "D:\存档\数据\"
- echo !sav2! >>D:\存档\游戏存档.log
- xcopy /e /y "!sav2!" "D:\存档\数据\"
- )
- )
- cls
- echo 游戏存档已经备份完毕,5秒后本窗口将自动关闭!
- timeout -t 5 >nul
- exit
复制代码
作者: xiaoyao202 时间: 2022-4-18 01:43
本帖最后由 xiaoyao202 于 2022-4-18 01:48 编辑
回复 9# yakeyun
谢谢大佬。我试了不是我要的结果。
图片中红框这几个文件夹里面都有sav文件。需要复制红框里面的文件夹到D盘。输出的文本只显示截图这样就行不知道这样要求是否能实现。再次谢谢各位大佬了
作者: Batcher 时间: 2022-4-18 22:45
回复 8# xiaoyao202
电脑是比较笨的,你得把规律总结出来才能写代码。
例如你需要复制的文件夹是:
.sav文件的上级文件夹?
.sav文件的上上级文件夹?
.sav文件的上上上级文件夹?
如果完全没规律的话,脚本也不知道到底该复制哪一级文件夹。
作者: tz_being 时间: 2022-4-19 08:46
按我的理解,楼主是想把%ALLUSERSPROFILE%和%LOCALAPPDATA%下面一级包含*.sav的文件夹复制到其它文件夹,如d:\存档,同时将复制的sav文件完整路径输出到d:\存档的txt文件中。
如C:\Users\Administrator\AppData\Local\SniperElite4\PC_ProfileSaves\76561197993333907\11.sav 复制到d:\存档 的结果就变成这样:
d:\存档\SniperElite4\PC_ProfileSaves\76561197993333907\11.sav
%LOCALAPPDATA%下面含*.sav的文件夹可能是三层,也可能是两层
输出到txt文件是这样:
C:\Users\Administrator\AppData\Local\SniperElite4\PC_ProfileSaves\76561197993333907\11.sav
作者: xiaoyao202 时间: 2022-4-19 20:14
本帖最后由 xiaoyao202 于 2022-4-19 20:27 编辑
回复 12# tz_being
是这个意思。输出到txt文件
C:\Users\Administrator\AppData\Local\SniperElite4这样就可以了。
SniperElite4这个是游戏的名字
游戏存档一般都在%ALLUSERSPROFILE%和%LOCALAPPDATA%这下面
作者: xiaoyao202 时间: 2022-4-19 20:20
回复 11# Batcher
可以先查找sav或save文件获取路径写入txt然后再读取txt截取路径。例子截取的路径C:\Users\Administrator\AppData\Local\SniperElite4(括号里面是完整路径
C:\Users\Administrator\AppData\Local\SniperElite4\PC_ProfileSaves\76561197993333907\11.sav)复制SniperElite4文件夹到D盘存档
这样的思路不知道行不行。截取这部分不会。
作者: Batcher 时间: 2022-4-19 21:27
回复 12# tz_being
不全面吧,你看8楼的截图,Tom Clancy's Ghost Recon Wildlands就不在那两个目录下
作者: xiaoyao202 时间: 2022-4-19 21:46
回复 14# xiaoyao202
游戏存档路径
C:\Users\Administrator\AppData\Roaming
C:\Users\Administrator\AppData\Local
C:\ProgramData
C:\Users\Administrator\Documents这个可以改D盘
作者: tz_being 时间: 2022-4-19 23:00
回复 15# Batcher
Tom Clancy's Ghost Recon Wildlands 就在%ALLUSERSPROFILE%(即C:\ProgramData)下面啊
作者: Batcher 时间: 2022-4-19 23:22
回复 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
- )
- )
复制代码
然后下一步再继续讨论到底获取哪一级文件夹
作者: yakeyun 时间: 2022-4-20 00:52
本帖最后由 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
- exit
复制代码
作者: yakeyun 时间: 2022-4-20 01:00
回复 18# Batcher
19楼已经用if过滤了非.sav的文件项目,但是拷贝会多一些其它扩展名文件。
作者: xiaoyao202 时间: 2022-4-20 02:24
本帖最后由 xiaoyao202 于 2022-4-20 02:42 编辑
回复 18# Batcher
测试了没问题。下一步读取sav文件路径然后截取
也就是需要复制roaming和local后面的文件夹
作者: xiaoyao202 时间: 2022-4-20 02:34
回复 20# yakeyun
谢谢大佬。但是需要的这种不是sav文件。文件夹是存档游戏的名字。sav文件在这些文件夹的子目录里面
作者: Batcher 时间: 2022-4-20 09:02
回复 21# xiaoyao202
请把这个txt文件上传到网盘我试试
作者: xiaoyao202 时间: 2022-4-20 12:24
回复 23# Batcher
https://wwi.lanzoup.com/i5g1J03hiqvg
蓝奏盘
作者: Batcher 时间: 2022-4-20 12:54
回复 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"
- )
- )
- )
- )
- endlocal
复制代码
作者: xiaoyao202 时间: 2022-4-20 17:48
本帖最后由 xiaoyao202 于 2022-4-20 17:50 编辑
回复 25# Batcher
谢谢大佬。测试没问题。但是2个批处理能合并一起吗。读取完1.txt然后删除。输出游戏存档路径的txt。也就是截取后的路径
作者: Batcher 时间: 2022-4-20 19:22
回复 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"
- )
- )
- )
- )
- endlocal
复制代码
作者: xiaoyao202 时间: 2022-4-20 20:57
本帖最后由 xiaoyao202 于 2022-4-20 21:02 编辑
回复 27# Batcher
谢谢大佬。测试可以用。能不能输出截取路径后的txt。不然不知道文件夹属于那个位置
作者: Batcher 时间: 2022-4-20 21:03
回复 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"
- )
- )
- )
- )
- endlocal
复制代码
作者: xiaoyao202 时间: 2022-4-20 21:09
回复 29# Batcher
非常感谢大佬
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |