windows - 批处理文件的 MID 函数

标签 windows batch-file batch-processing

我带着批处理文件问题回来了。我问了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

如果您仍在阅读本文,请为他们的贡献投票,给他们一些爱。再次感谢!

最佳答案

像这样的东西应该可以满足您的要求。

@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 move "H:\benton_off_site_backup\zipbackups\%%~i" "H:\benton_off_site_backup\zipbackups\AlreadyUnzipped\!filename:~-8,4!\!mm!.%%month[!mm!]%%\%%~i"

)
endlocal
exit

关于windows - 批处理文件的 MID 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25982123/

相关文章:

c++ - linux makefile等效?重要的

ruby-on-rails - Ruby 和 Cucumber - 这是什么意思? "([^"]*)"$/

javascript - 使用 javascript 将请求批量上传到 Google Cloud Storage

api - 图批处理 API

windows - 获取特定驱动器的 GUID

C 中无法打印最大行

windows - Windows 7 中的 FFMPEG : merge mp4 files from different folders in a batch

windows - 将文本从 Windows CMD 窗口复制到剪贴板

java - Hibernate批量保存嵌套对象

java - 处理完成后使用同一线程进行其他数据库操作