首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按当月批量复制、移动文件

按当月批量复制、移动文件
EN

Stack Overflow用户
提问于 2019-01-07 15:56:16
回答 3查看 767关注 0票数 2

目前,我有一个特定的批处理文件,我需要每个月运行。我想把它合并到一个bat文件中。有条件的,如果2月1日使用2月19日。

如果当前日期为2019年1月,则运行

代码语言:javascript
运行
复制
copy "C:\TESTone\*.*" "C:\Jan-19"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\Jan-19\"

如果当前日期为2019年2月,则运行

代码语言:javascript
运行
复制
copy "C:\TESTone\*.*" "C:\Feb-19"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\Feb-19\"

如果当前日期是2019年3月,运行

代码语言:javascript
运行
复制
copy "C:\TESTone\*.*" "C:\Mar-19"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\Mar-19\"
EN

回答 3

Stack Overflow用户

发布于 2019-01-07 17:12:52

以下是一种可能的解决方案:

代码语言:javascript
运行
复制
@echo off

setlocal EnableDelayedExpansion

set month[01]=Jan
set month[02]=Feb
set month[03]=Mar
set month[04]=Apr
set month[05]=May
set month[06]=Jun
set month[07]=Jul
set month[08]=Aug
set month[09]=Sep
set month[10]=Oct
set month[11]=Nov
set month[12]=Dec

for /f "tokens=2 delims==" %%A in ('wmic OS Get localdatetime /value') do set "dt=%%A"
set "YY=%dt:~2,2%" & set "MM=%dt:~4,2%"

copy "C:\TESTone\*.*" "C:\!month[%MM%]!-%YY%"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\!month[%MM%]!-%YY%\"
pause

启用delayed expansion

  • 在这里会有所帮助,因为我们在这里需要它,既不需要在代码块中使用它,也不需要在一行中设置和使用变量时使用它。这会有所帮助,因为我们希望回显一个变量,该变量的值是另一个variable.
  • Setting月份数组的名称。我们使用form varname[monthnum].
  • Finding date wmic,否则它就不是国际化的了。datetime环境变量由用户定义,它们通常取决于用户区域设置,年份的最后两位数存储在YY变量中,月份的两位数存储在OP想要的是copy "C:\TESTone\*.*" "C:\MMM-YY"move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\MMM-YY\"MM variable.
  • The命令中。所以,YY已经准备好了,我们有:

代码语言:javascript
运行
复制
copy "C:\TESTone\*.*" "C:\MMM-%YY%"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\MMM-%YY%\"

MMM是变量month[MM]的值。所以,在这里使用延迟展开;用!包装number变量,用%包装MM。它将是:

代码语言:javascript
运行
复制
copy "C:\TESTone\*.*" "C:\!month[%MM%]!-YY"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\!month[%MM%]!-YY\"

然后:

代码语言:javascript
运行
复制
copy "C:\TESTone\*.*" "C:\!month[num]!-YY"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\!_num!-YY\"

然后被处理,这实际上是OP所要求的。

票数 2
EN

Stack Overflow用户

发布于 2019-01-07 21:11:15

获得与地区/用户设置无关的日期的wmic的替代方案是powershell,

它可以直接输出所需的格式:

代码语言:javascript
运行
复制
:: Q:\Test\2019\01\07\SO_54070456.cmd
@Echo off
for /f "usebackq" %%A in (`powershell -NoP -C "get-date -f 'MMM-yy'"`) Do set "Month=%%A"
copy "C:\TESTone\*.*" "C:\%Month%"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\%Month%\"

下面是唯一回显的结果命令:

代码语言:javascript
运行
复制
> Q:\Test\2019\01\07\SO_54070456.cmd
copy "C:\TESTone\*.*" "C:\Jan-19"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\Jan-19\"

PowerShell将返回带有当前区域性的月份缩写MMM,以选择特殊的不同区域性用法:

(Get-Date).ToString(‘MMM yy’,(New-Object System.Globalization.CultureInfo(“en-us”)

要查找区域性,可以使用.dot Net函数:

globalization.cultureinfo::GetCultures('allCultures')

票数 2
EN

Stack Overflow用户

发布于 2019-01-07 16:22:06

根据您的区域设置,您可能需要稍微更改set destFolder=!month:~%d%,3!-%date:~8,2%上的一些参数,这是因为我插入了一个回声,以便首先在屏幕上向您显示正在发生的事情。结尾处也有停顿。调试完成后,您可以删除暂停:

代码语言:javascript
运行
复制
@echo off
setlocal EnableDelayedExpansion
for /F "tokens=1 delims=/" %%m in ("%date%") do (
   set /A "m=(1%%m%%100-1)*3"
)
set month=JanFebMarAprMayJunJulAugSepOctNovDec
set destFolder=!month:~%d%,3!-%date:~8,2%

set destFolder1=C:\%destFolder%\
echo copy "C:\TESTone\*.*" %destFolder1%
copy "C:\TESTone\*.*" %destFolder1%

set destFolder2=\\172.1.1.1\Shared-File\%destFolder%\
echo move "C:\TESTone\*.*" %destFolder2%
move "C:\TESTone\*.*" %destFolder2%

pause
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54070456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档