如何解决MONTH变量现在有问题
我使用了一个简单的批处理文件来创建每日修改的工作文件存档。我已经使用了很多年,可能是通过Windows 2008 R2回到Windows 2000。我也刚刚在2019年9月开始在Windows 10桌面上使用它,但最近我注意到Windows 10中一定有所更改,这导致我的Month输出文件夹在月份名称之后有2个额外的,看似无效的字符,这导致我在Windows中遇到了一些问题。
我的代码是这个
@echo off
color 06
set FILE_DATE=%date:~4,2%-%date:~7,2%-%date:~10,4%
set YEAR=%date:~10,4%
REM Month Converter From Date Variable
SET MONTH=%DATE:~4,2%
SET MONTH=%MONTH:01=01 January%
SET MONTH=%MONTH:02=02 February%
SET MONTH=%MONTH:03=03 March%
SET MONTH=%MONTH:04=04 April%
SET MONTH=%MONTH:05=05 May%
SET MONTH=%MONTH:06=06 June%
SET MONTH=%MONTH:07=07 July%
SET MONTH=%MONTH:08=08 August%
SET MONTH=%MONTH:09=09 September%
SET MONTH=%MONTH:10=10 October%
SET MONTH=%MONTH:11=11 November%
SET MONTH=%MONTH:12=12 December%
ROBOCOPY "D:\Josh\Documents" "D:\Josh\Archives\%YEAR%\%MONTH%\%FILE_DATE%\Documents" /r:0 /w:0 /s /MAXAGE:1 /XF *.arb *.arf *.u$r *.db *.tmp *.prn *.uas *.pst
应该创建类似的文件夹结构
D:\Josh\Archives\2019\09 September\09-18-2019
但是看起来要输出的是
D:\Josh\Archives\2019\09 September \09-18-2019
如果我要重命名文件夹,您会在名称中看到2个字符的空格。
如果我退格以删除文件夹名称中的字符,则会出现此错误。
如果我尝试删除该文件夹,则会收到此错误。
如果我将month文件夹的内容移动到另一个文件夹,事情会变得很奇怪,相邻的文件夹也开始出现问题,包括文件消失。任何一个严重的问题。
该脚本仍可以在Windows Server R2上正常运行。我一直在网上进行挖掘,试图找出是否可能导致变量或Robocopy更改的某种方式导致了这种情况,但我想这只是我需要在代码中对Windows 10中的更改进行调整的一种方式,但是我可以似乎找不到解决方案。希望经验丰富的人可以为我指明正确的方向。感谢您的宝贵时间!
p.s。 -图像指向的是不同的文件夹,我在一段时间内做了此帖子,但条件是相同的。 Thx:)
解决方法
我不确定您是否知道,但是%DATE%
是本地/语言相关的,因此无法依赖其输出以期望的格式提供一致的输出。
这是一个简单方法的示例,该方法使用两个for
循环来生成基于日期的变量,而与用户,PC,语言环境或语言设置无关。
@Echo Off
SetLocal EnableExtensions
Color 06
For /F "Tokens=1-3 Delims=/ " %%G In ('"%__APPDIR__%Robocopy.exe \: . /NJH /L | %__APPDIR__%find.exe " 123""') Do Set "Today=%%H-%%I-%%G"
For /F "Tokens=%Today:~,2%" %%G In ("January February March April May June July August September October November December") Do Set "Month=%Today:~,2% %%G"
"%__APPDIR__%Robocopy.exe" "D:\Josh\Documents" "D:\Josh\Archives\%Today:~-4%\%Month%\%Today%\Documents" /MaxAge:1 /R:0 /S /W:0 /XF *.arb *.arf *.u$r *.db *.tmp *.prn *.uas *.pst
如果您想使用powershell中的batch-file进行尝试,下面是一个基本的单行示例,以帮助您入门:
@PowerShell.exe -NoProfile "Robocopy.exe \"D:\Josh\Documents\" \"D:\Josh\Archives\$(Get-Date -Format 'yyyy\\MM MMMM\\MM-dd-yyyy')\Documents\" /r:0 /w:0 /s /MAXAGE:1 /XF *.arb *.arf *.u$r *.db *.tmp *.prn *.uas *.pst"
,
照原样使用当前的robocopy
命令,只需使用powershell
来确定日期格式的月份,而无需手动手动指定每个月。
@echo off & color 06
for /f "tokens=1-4*" %%i in ('PowerShell -Command "& {Get-Date -format 'yyyy MM MMMM dd'}"') do (
robocopy "D:\Josh\Documents" "D:\Josh\Archives\%%i\%%j %%k\%%j-%%l-%%i\Documents" /r:0 /w:0 /s /MAXAGE:1 /XF *.arb *.arf *.u$r *.db *.tmp *.prn *.uas *.pst
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。