batch-file - 将匹配文件的列表输出到 .txt 然后移动文件,使用 txt 稍后将文件返回到原始文件夹
问题描述
这个问题实际上有两个部分:
- 我有一个文件夹,里面装满了我需要临时移动到新位置的文件。
- 但是,我稍后需要将文件移回其原始位置。
我有一个文件夹,里面装满了如下所示的文件和文件夹:
C:\VIDEO\My Video 1\My Video 1.mkv
C:\VIDEO\MyVideo2\MyVideo2.mkv
C:\VIDEO\My.Video.3\My.Video.3.mkv
我需要:
1. Recursively find all *.mkv files within C:\VIDEO folder
2. Output a list of the existing Dir structure/file and folder names/paths to a .txt file
3. Then Move all *.mkv files from C:\VIDEO to another folder C:\Temp
(I do not want to retain the original folder structure during this move)
稍后我需要:
4. Search for all *.mkv files in C:\Temp
5. Use the .txt file to help move each *.mkv file back into their original location
我想这可能需要 2 个单独的批处理文件。
这是我目前的进展:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
:: Setup
set "SourcePath=C:\VIDEO"
set "DestPath=C:\Temp"
:: Output Items To Txt File
for /f "delims=\" %%A in ('dir "%SourcePath%"\*.mkv') DO echo "%SourcePath%">>"%DestPath%"\output.txt
:: Move Matching Items
for /f "tokens=*" %%a IN ('dir "%SourcePath%"\*.mkv') DO move /y "%SourcePath%\%%a" "%DestPath%"
有人可以帮忙吗?
解决方案
您想将一棵树移动到一个平坦的目的地(知道您稍后想要将其移回并必须重新创建树)?到底为什么会有人这样做……
但是没问题:
@echo off
set "SourcePath=C:\VIDEO"
set "DestPath=C:\Temp"
echo @echo off > MoveBack.bat
for /r "%SourcePath%" %%A in (*.mkv) do (
ECHO move "%%~fA" "%DestPath%\"
>> MoveBack.bat echo move "%DestPath%\%%~nxA" "%%~dpA"
)
echo done. To move them back, execute MoveBack.bat
与其将移动的文件记录到文本文件并稍后迭代该文件,不如只构建一个“恢复”脚本更容易。
有关%%~
修饰符的描述,请阅读for /?
move
注意:出于安全原因,我解除了命令。如果您确定它按预期工作,请删除ECHO
.
注意:文件夹树中可能有重复的文件名。这个脚本没有考虑到这一点(说:在这种情况下你可能会丢失数据)
推荐阅读
- java - 我的程序中的逻辑是否接近解决方案?
- javascript - 反应原生 | 如何使用 Typescript 访问键盘的 endCoordinates 并重新组合
- go - 无法访问 Golang 中的登录页面
- ruby - chef 模板给出 No such file or directory @ rb_sysopen Errno::ENOENT
- php - PHP获取本地语言
- c# - 使用访问数据库将具有多个值的项目从列表框中显示到文本框中
- qt - 在 qml 自定义构建步骤中复制文件夹永远不会结束
- css - React Fontawesome 没有免费品牌 svg 图标,因此无法显示社交媒体图标
- php - 是否可以在 CodeIgniter 挂钩中加载单例?
- karma-jasmine - 启动 Pact 服务器抛出 Pact 二进制错误