Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 创建基于年的文件夹和基于月的子文件夹的批处理脚本_Batch File - Fatal编程技术网

Batch file 创建基于年的文件夹和基于月的子文件夹的批处理脚本

Batch file 创建基于年的文件夹和基于月的子文件夹的批处理脚本,batch-file,Batch File,我一直在尝试创建一个基本的批处理脚本,该脚本将创建当前年份(例如2014年)的文件夹,然后创建当前月份(6月等)的子文件夹。一旦建立了这些域,我需要根据林中的不同域(例如荷马、詹威、汽车人域)创建文件夹 当我输入日期时,我得到以下信息(在我们所有的系统上都是一样的): 2014年6月30日星期一 以下是我目前掌握的代码: 目前,它只创建如下所示的文件夹: 2014\%month%\Homer 而不是 2014年6月荷马可能有更好的方法,但我相信这会奏效 set yearfoldername=

我一直在尝试创建一个基本的批处理脚本,该脚本将创建当前年份(例如2014年)的文件夹,然后创建当前月份(6月等)的子文件夹。一旦建立了这些域,我需要根据林中的不同域(例如荷马、詹威、汽车人域)创建文件夹

当我输入日期时,我得到以下信息(在我们所有的系统上都是一样的):

2014年6月30日星期一

以下是我目前掌握的代码:



目前,它只创建如下所示的文件夹: 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
命令有一个有趣的技巧