【发布时间】:2014-11-16 21:27:15
【问题描述】:
我带着一个批处理文件问题回来了。我向this 询问了有关在批处理文件中获取范围的问题,以便我们可以更轻松地进行备份。将文件复制到我们的系统后,我们会解压缩文件,以便我们对客户的数据进行“运行备份”。我现在要完成的是将刚刚解压缩的文件从其当前目录移动到存档目录。到目前为止,我有以下内容:
@echo off
FOR /F %%i IN (H:\benton_off_site_backup\zipbackups\ZipBackupsList.txt) DO (
c:\wzzip\wzunzip -o -d H:\benton_off_site_backup\zipbackups\%%i h:\benton_off_site_backup\
move H:\benton_off_site_backup\zipbackups\%%i H:\benton_off_site_backup\zipbackups\AlreadyUnzipped
)
exit
这很好,但AlreadyUnzipped 文件夹包含按年份标记的子文件夹。年文件夹有按月标记的子文件夹。
i.e. H:\benton_off_site_backup\zipbackups\AlreadyUnzipped\2014\1.January
H:\benton_off_site_backup\zipbackups\AlreadyUnzipped\2014\2.February
...
这些文件夹包含已解压缩的所有内容。我想要发生的是,一旦解压缩过程完成,我希望将文件移动到相应的存档文件夹中。一个例子是:
daily20140105.zipx
需要去
H:\benton_off_site_backup\zipbackups\AlreadyUnzipped\2014\1.January
我在网上做了一些研究,找到了this 网站,但一直没有发生任何事情。我一直在做 MID 等价物。如果我需要进一步解释自己,那么我很乐意这样做。提前致谢!
更新
非常感谢@David Ruhmann 的帮助!他让我走到了这一步
setlocal EnableDelayedExpansion
set "count=0"
for %%A in (January February March April May June July August September October November December) do set /a "count+=1" & set "month[!count!]=%%A"
FOR /F %%i IN (H:\benton_off_site_backup\zipbackups\ZipBackupsList.txt) DO (
c:\wzzip\wzunzip -o -d H:\benton_off_site_backup\zipbackups\%%i h:\benton_off_site_backup\
set "filename=%%~ni"
set "mm=!filename:~-4,2!"
if "!filename:~-4,1!"=="0" set "mm=!filename:~-3,1!"
call move H:\benton_off_site_backup\zipbackups\%%~i H:\benton_off_site_backup\zipbackups\AlreadyUnzipped\!filename:~-8,4!\!mm!.%%month[!mm!]%%\%%i
当我调试它时,以下内容被回显出来。
move H:\benton_off_site_backup\zipbackups\daily20140920.zipx
H:\benton_off_site_backup\zipbackups\AlreadyUnzipped\2014\9.September\daily20140920.zipx
路径是正确的,但它什么也没做!它只提取文件,然后说系统找不到路径并移动到下一个要提取的文件。 GRRRR!
完成:
我非常感谢@DavidRuhmann 和@Magoo。如果没有他们的帮助和敏锐的洞察力,我会在寻找答案的过程中陷入困境。我已经将他们的两个输入都用于我的最终程序,如下所示:
@echo off
setlocal EnableDelayedExpansion
set "count=0"
for %%A in (January February March April May June July August September October November December) do set /a "count+=1" & set "month[!count!]=%%A"
FOR /F %%i IN (H:\benton_off_site_backup\zipbackups\ZipBackupsList.txt) DO (
c:\wzzip\wzunzip -o -d H:\benton_off_site_backup\zipbackups\%%i h:\benton_off_site_backup\
set "filename=%%~ni"
set "mm=!filename:~-4,2!"
if "!filename:~-4,1!"=="0" set "mm=!filename:~-3,1!"
CALL SET "monthdir=!filename:~-8,4!\!mm!.%%month[!mm!]%%"
MD H:\benton_off_site_backup\zipbackups\AlreadyUnzipped\!monthdir! 2>NUL
call move H:\benton_off_site_backup\zipbackups\%%~i H:\benton_off_site_backup\zipbackups\AlreadyUnzipped\!monthdir!\%%i
)
endlocal
exit
如果您仍在阅读本文,请为这些人的贡献点赞,给他们一些爱。再次感谢!
【问题讨论】:
标签: windows batch-file batch-processing