Batch file 创建基于年的文件夹和基于月的子文件夹的批处理脚本
我一直在尝试创建一个基本的批处理脚本,该脚本将创建当前年份(例如2014年)的文件夹,然后创建当前月份(6月等)的子文件夹。一旦建立了这些域,我需要根据林中的不同域(例如荷马、詹威、汽车人域)创建文件夹 当我输入日期时,我得到以下信息(在我们所有的系统上都是一样的): 2014年6月30日星期一 以下是我目前掌握的代码:Batch file 创建基于年的文件夹和基于月的子文件夹的批处理脚本,batch-file,Batch File,我一直在尝试创建一个基本的批处理脚本,该脚本将创建当前年份(例如2014年)的文件夹,然后创建当前月份(6月等)的子文件夹。一旦建立了这些域,我需要根据林中的不同域(例如荷马、詹威、汽车人域)创建文件夹 当我输入日期时,我得到以下信息(在我们所有的系统上都是一样的): 2014年6月30日星期一 以下是我目前掌握的代码: 目前,它只创建如下所示的文件夹: 2014\%month%\Homer 而不是 2014年6月荷马可能有更好的方法,但我相信这会奏效 set yearfoldername=
目前,它只创建如下所示的文件夹: 2014\%month%\Homer 而不是
2014年6月荷马可能有更好的方法,但我相信这会奏效
set yearfoldername=%date:~-4%
set month=%date:~-10,2%
if "%month%" EQU "01" set asd=January
if "%month%" EQU "02" set asd=February
if "%month%" EQU "03" set asd=March
if "%month%" EQU "04" set asd=April
if "%month%" EQU "05" set asd=May
if "%month%" EQU "06" set asd=June
if "%month%" EQU "07" set asd=July
if "%month%" EQU "08" set asd=August
if "%month%" EQU "09" set asd=September
if "%month%" EQU "10" set asd=October
if "%month%" EQU "11" set asd=November
if "%month%" EQU "12" set asd=December
md %yearfoldername%
md %yearfoldername%\%asd%
md %yearfoldername%\%asd%\Homer
md %yearfoldername%\%asd%\Janeway
md %yearfoldername%\%asd%\Autobots
可能有更好的方法,但我相信这会奏效
set yearfoldername=%date:~-4%
set month=%date:~-10,2%
if "%month%" EQU "01" set asd=January
if "%month%" EQU "02" set asd=February
if "%month%" EQU "03" set asd=March
if "%month%" EQU "04" set asd=April
if "%month%" EQU "05" set asd=May
if "%month%" EQU "06" set asd=June
if "%month%" EQU "07" set asd=July
if "%month%" EQU "08" set asd=August
if "%month%" EQU "09" set asd=September
if "%month%" EQU "10" set asd=October
if "%month%" EQU "11" set asd=November
if "%month%" EQU "12" set asd=December
md %yearfoldername%
md %yearfoldername%\%asd%
md %yearfoldername%\%asd%\Homer
md %yearfoldername%\%asd%\Janeway
md %yearfoldername%\%asd%\Autobots
我会这样做:
@echo off
setlocal EnableDelayedExpansion
rem Define the array of month names
set m=100
for %%a in (January February March April May June
July August September October November December) do (
set /A m+=1
set monthName[!m:~-2!]=%%a
)
for /F "tokens=2,4 delims=/ " %%a in ("%date%") do (
set yearFolderName=%%b
set month=%%a
)
md %yearFolderName%
md %yearFolderName%\!monthName[%month%]!
for %%a in (Homer Janeway Autobots) do (
md %yearFolderName%\!monthName[%month%]!\%%a
)
有关阵列管理的更多详细信息,请参阅。这是我将使用的方法:
@echo off
setlocal EnableDelayedExpansion
rem Define the array of month names
set m=100
for %%a in (January February March April May June
July August September October November December) do (
set /A m+=1
set monthName[!m:~-2!]=%%a
)
for /F "tokens=2,4 delims=/ " %%a in ("%date%") do (
set yearFolderName=%%b
set month=%%a
)
md %yearFolderName%
md %yearFolderName%\!monthName[%month%]!
for %%a in (Homer Janeway Autobots) do (
md %yearFolderName%\!monthName[%month%]!\%%a
)
有关阵列管理的更多详细信息,请参阅。另一种方法
@echo off
setlocal enableextensions disabledelayedexpansion
:: Data section : table of months
::month:01:January
::month:02:February
::month:03:March
::month:04:April
::month:05:May
::month:06:June
::month:07:July
::month:08:August
::month:09:September
::month:10:October
::month:11:November
::month:12:December
:: Code Section
for /f "tokens=2,4 delims=/ " %%a in ( "%date%"
) do for /f "tokens=3 delims=: " %%c in ( 'findstr /l /c:"::month:%%a" "%~f0"'
) do for %%d in ( Homer Janeway Autobots
) do md "%%b\%%c\%%d"
endlocal
它拆分日期以检索所需字段,从批处理文件中声明的数据部分检索字段名(使用findstr根据月号检索正确的行),并为每个域创建相应的文件夹 另一种方式
@echo off
setlocal enableextensions disabledelayedexpansion
:: Data section : table of months
::month:01:January
::month:02:February
::month:03:March
::month:04:April
::month:05:May
::month:06:June
::month:07:July
::month:08:August
::month:09:September
::month:10:October
::month:11:November
::month:12:December
:: Code Section
for /f "tokens=2,4 delims=/ " %%a in ( "%date%"
) do for /f "tokens=3 delims=: " %%c in ( 'findstr /l /c:"::month:%%a" "%~f0"'
) do for %%d in ( Homer Janeway Autobots
) do md "%%b\%%c\%%d"
endlocal
它拆分日期以检索所需字段,从批处理文件中声明的数据部分检索字段名(使用findstr根据月号检索正确的行),并为每个域创建相应的文件夹 太棒了!我在这里看到了答案,所有这些对我来说都很有用。在我回来查看回复之前,我解决了这个问题。非常感谢大家的帮助。我仍在学习这些东西,所以所有的回答都向我展示了不同的做事方式。以下是我最后做的事情(基于我有限的知识,所以代码很冗长): 再次感谢大家的回答 /r
三轮车真棒!我在这里看到了答案,所有这些对我来说都很有用。在我回来查看回复之前,我解决了这个问题。非常感谢大家的帮助。我仍在学习这些东西,所以所有的回答都向我展示了不同的做事方式。以下是我最后做的事情(基于我有限的知识,所以代码很冗长): 再次感谢大家的回答 /r
TrikerII您的原始代码有一组多余的百分比。例如,
md%yearfoldername%\%%month%%\Homer
应改为md%yearfoldername%\%month%\Homer
请注意,MD命令可以使用一个命令创建多个文件夹。您不需要以下内容:
md %yearfoldername%
md %yearfoldername%\%month%
因为下面的命令将创建上述两个文件夹
md %yearfoldername%\%month%\Homer
根据配置的不同,在某些计算机上,对DATE命令的解析可能会失败,因为DATE依赖于语言环境。听起来你已经意识到了这一点,因为你说“在我们所有的系统上都是一样的”
我已经编写了一个程序,它可以非常方便地在任何Windows计算机上处理日期和时间,而不管语言环境设置如何。该实用程序是纯脚本,从XP开始将在任何Windows计算机上运行。脚本中嵌入了完整的文档
只要getTimestamp.bat在当前目录中,或者更好,在路径中的某个位置,那么只需要以下内容:
@echo off
call getTimestamp -f {yyyy}\{month} -r yrMo
for %%F in (Homer Janeway Autobots) do md "%yrMo%\%%F" 2>nul
我将错误输出重定向到NUL,以防任何文件夹已经存在
将脚本改编为任何语言都很容易。以下是西班牙语的解决方案:
@echo off
call getTimestamp -f {yyyy}\{month} -r yrMo -month "enero febrero marzo abril mayo junio julio agosto septiembre octubre noviembre diciembre"
for %%F in (Homer Janeway Autobots) do md "%yrMo%\%%F" 2>nul
您的原始代码有一组多余的百分比。例如,
md%yearfoldername%\%%month%%\Homer
应改为md%yearfoldername%\%month%\Homer
请注意,MD命令可以使用一个命令创建多个文件夹。您不需要以下内容:
md %yearfoldername%
md %yearfoldername%\%month%
因为下面的命令将创建上述两个文件夹
md %yearfoldername%\%month%\Homer
根据配置的不同,在某些计算机上,对DATE命令的解析可能会失败,因为DATE依赖于语言环境。听起来你已经意识到了这一点,因为你说“在我们所有的系统上都是一样的”
我已经编写了一个程序,它可以非常方便地在任何Windows计算机上处理日期和时间,而不管语言环境设置如何。该实用程序是纯脚本,从XP开始将在任何Windows计算机上运行。脚本中嵌入了完整的文档
只要getTimestamp.bat在当前目录中,或者更好,在路径中的某个位置,那么只需要以下内容:
@echo off
call getTimestamp -f {yyyy}\{month} -r yrMo
for %%F in (Homer Janeway Autobots) do md "%yrMo%\%%F" 2>nul
我将错误输出重定向到NUL,以防任何文件夹已经存在
将脚本改编为任何语言都很容易。以下是西班牙语的解决方案:
@echo off
call getTimestamp -f {yyyy}\{month} -r yrMo -month "enero febrero marzo abril mayo junio julio agosto septiembre octubre noviembre diciembre"
for %%F in (Homer Janeway Autobots) do md "%yrMo%\%%F" 2>nul
请问为什么
设置m=100
从100开始?为什么不使用monthName[!m!]
而不是monthName[!m:~-2!]
?@JohnDOE:因为月份数字的左零:01 02。。。09 10 11 12
如果m
从零开始,则有必要在1和9之间的值中插入一个左零,或从月数中删除左零。这样,设置m=101、102、
并获取最后两个字符非常容易:01 02…
我可以问一下为什么set m=100
从100开始吗?为什么不使用monthName[!m!]
而不是monthName[!m:~-2!]
?@JohnDOE:因为月份数字的左零:01 02。。。09 10 11 12
如果m
从零开始,则有必要在1和9之间的值中插入一个左零,或从月数中删除左零。这样,设置m=101、102、
并获取最后两个字符非常容易:01 02…
+1一种不同的方法!您可以定义一个值的查找表,并通过findstr
进行搜索。使用setx
命令有一个有趣的技巧