添加带有名称的文本文件到每个目录

时间:2017-06-07 17:54:01

标签: windows batch-file cmd

我在尝试将文本文件添加到此目录中具有特定名称的每个目录时遇到了一些麻烦。我有一个名为Daily Notes的目录,我在那里保存当天的笔记,我按周进行了进一步的整理。所以我在这里有一堆目录,例如6.5.17-6.10.17,在每个目录中,我需要一个名称格式为6.7.17DailyNotes.txt的文本文件。我知道我每天都可以轻松地手工完成这项工作,但我有一些空闲时间,并且正在努力学习如何用cmd编程。我试图用for循环创建一个测试文本文件,但它将它保存到包含批处理文件的目录中。这是我现在的代码:

@echo off
setlocal disabledelayedexpansion

set "folder=%~1"
if not defined folder set "folder=%cd%"

for /D %%a in ("%folder%\*") do (
    echo test > test.txt
)

endlocal

所以,我想进入每个目录并制作5个文本文件,每天一个,格式为month.day.yearDailyNotes.txt。我以为我可以通过读取目录名来创建一个变量,并在几天之内计算文本文件的数量。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

您的评论

  

我知道处理月份变化非常困难   一周中,我觉得这是可以接受的   手动处理该部分,因此有一个名为的文件   

之后我手动改变的10.32.17DailyNotes.txt

使其更容易(批处理中的日期/时间数学为possible, but ugly and involves a lot of code

@echo off
setlocal enabledelayedexpansion
REM next two lines for simulating your environment:
set "folder=%~dp0"
md 6.5.17-6.10.17 6.11.17-6.16.17 2>nul

REM for every folder
for /d %%f in ("%folder%*.*.*-*.*.*") do (
  REM extract day, month and year [from first part of foldername]
  for /f "tokens=1-3 delims=.-" %%a in ("%%~nxf")do (
    REM calculate "end day" [may be greater than days in that month]
    set /a end=%%b+5
    REM for [start] to [end]
    for /l %%i in (%%b,1,!end!) do (
      REM create blank file
      break > "%%f\%%a.%%i.%%cDailyNotes.txt"
    )
  )
)

答案 1 :(得分:0)

遍历所有子目录并创建一个test.txt文件。

set "folder=%~1"
if not defined folder set "folder=%cd%"

FOR /F "usebackq tokens=*" %%a IN (`DIR /S /B /A:D "%folder%\*"`) DO (
    ECHO test > "%%~a\test.txt"
)

答案 2 :(得分:0)

@echo off
setlocal disabledelayedexpansion

set "folder=%~1"
if not defined folder set "folder=%cd%"

for /D %%q in ("%folder%\*") do (
    echo test "%%q\%%~nxqDailyNotes.txt"
)

ENDLOCAL

有趣的运动有几个曲折。

我发布的代码只会显示' test" fullfilename " &#39 ;.当然,您可以使用copy nul "*fullfilename*"' to create an empty file (with> nul to suppress the creation-report) or echo。>" fullfilename "`创建一个只包含空行的文件 - 或者不管。

主要的魔力在于体操创建文件名。由于您使用的是for/d,因此目录名将显示在%%q中。所以所需的文件名是该目录名的名称+扩展部分(你和我知道它实际上不是文件名,而是目录树的最外面的叶名 - 只是不要告诉cmd)所以我们使用%%~nxq表示"文件名"的名称和扩展名部分。在%%q中(请参阅文档提示中的for /?|more)。然后我们只是将所需名称的其余部分作为字面值。

那么 - 为什么改为%%q

假设我们将其保留为%%a。然后文件名为" %% ~nxaDailyNotes.txt"并被解释为%%a的名称,扩展名,属性和驱动,因为i既不是修饰语也不是参与元变量。将元变量从%%a更改为%%q可以消除误解。