Windows 使用新的时间戳在循环中创建后重命名文件夹(不久)-批处理文件

Windows 使用新的时间戳在循环中创建后重命名文件夹(不久)-批处理文件,windows,batch-file,cmd,Windows,Batch File,Cmd,基本问题: 如何获取最近创建的文件夹(在同一批中完成),然后在该文件夹中执行操作,然后使用时间戳重命名该文件夹,并使用生成新时间戳的新文件重复操作 我的批处理代码大纲和预期与实际结果的对比: 我正在为目录中的所有文件创建一个批处理文件,该文件将循环执行以下步骤 步骤1(工作):遍历目录中的文件并提取数据,然后将这些数据输出到一个已创建的文件夹中,该文件夹必须命名为“output”(在该步骤中创建) 第2步(工作):我必须进入这个“输出”文件夹并用数据“做一些事情”(我已经有一个脚本进入这个新的文

基本问题:

如何获取最近创建的文件夹(在同一批中完成),然后在该文件夹中执行操作,然后使用时间戳重命名该文件夹,并使用生成新时间戳的新文件重复操作

我的批处理代码大纲和预期与实际结果的对比

我正在为目录中的所有文件创建一个批处理文件,该文件将循环执行以下步骤

步骤1(工作):遍历目录中的文件并提取数据,然后将这些数据输出到一个已创建的文件夹中,该文件夹必须命名为“output”(在该步骤中创建)

第2步(工作):我必须进入这个“输出”文件夹并用数据“做一些事情”(我已经有一个脚本进入这个新的文件路径“输出”和“做一些事情”)

步骤3(不工作):将文件夹“output”重命名为“output#u TimeStamp”(这就是我的问题所在,我的循环使用创建的第一个文件夹的TimeStamp#1,并尝试将所有文件夹命名为TimeStamp#1)

步骤4(半工作):返回步骤1处理下一个文件(循环直到目录中的所有文件都完成)

我的代码(至少有一次尝试)

我的研究

我尝试了很多方法,并使用了链接 和。

我觉得这应该比写这个问题容易得多。

没有检查脚本的逻辑,我修复了我在中提到的以下问题:

  • goto:Label
    中断了括号内代码块的上下文,您的
    for
    循环构成了这样一个块;因此,在
    :Label
    处继续执行,但执行方式不再是块中。您可以通过将包含
    goto
    :Label
    的代码部分放置在子例程中,并通过
    call
    命令调用它来解决这个问题;这会将当前块上下文隐藏在
    goto
  • ::
    注释在循环或其他括号内的代码块中使用时可能会导致意外行为;它们实际上构成了无效的标签。您应该改用
    rem
  • 启用并将其用于变量
    日期
    时间
    文件名
    ,因为否则它们总是在解析整个循环时扩展到当前的值
  • 下面是修改后的代码:

    setlocal EnableDelayedExpansion
    rem//循环以对当前目录中的文件执行任务
    对于(*.mp4)中的/R%%f,请执行以下操作(
    rem//从文件中提取数据并将其保留在已创建的输出文件夹中
    启动“/w”Sample.exe”--剪辑“%%f”--详细2--outDir输出
    rem//这将进入已创建的输出文件夹,并对数据进行填充
    开始“/w”C:\Users\user\Documents\winPython\winPython-64bit-3.4.4.2\python-3.4.4.amd64\python.exe”“%CD%\DoStuff.py”“%CD%\output\folder\folder2\Do.file”
    rem//这应该用时间戳重命名文件夹
    将“输出”重命名为“输出”-!日期:~4,2!-!日期:~7,2!-!日期:~10,4!-时间:~0,2!!时间:~3,2!”
    电话:SUB
    echo您可以安全地使用此名称!文件名!创建新文件
    )
    端部
    退出/B
    :SUB
    rem//这就是我的研究结果,它在时间戳中增加了一个数字,但不起作用
    设置/a N=0
    设置“文件名=输出-%date:~4,2%-%date:~7,2%-%date:~10,4%\u时间:~0,2%%时间:~3,2%。%N%
    :循环
    设置/a N+=1
    设置“文件名=输出-%date:~4,2%-%date:~7,2%-%date:~10,4%\u时间:~0,2%%时间:~3,2%。%N%
    如果存在“%FILENAME%”转到:循环
    退出/B
    
    没有检查脚本的逻辑,我修复了我在中提到的以下问题:

  • goto:Label
    中断了括号内代码块的上下文,您的
    for
    循环构成了这样一个块;因此,在
    :Label
    处继续执行,但执行方式不再是块中。您可以通过将包含
    goto
    :Label
    的代码部分放置在子例程中,并通过
    call
    命令调用它来解决这个问题;这会将当前块上下文隐藏在
    goto
  • ::
    注释在循环或其他括号内的代码块中使用时可能会导致意外行为;它们实际上构成了无效的标签。您应该改用
    rem
  • 启用并将其用于变量
    日期
    时间
    文件名
    ,因为否则它们总是在解析整个循环时扩展到当前的值
  • 下面是修改后的代码:

    setlocal EnableDelayedExpansion
    rem//循环以对当前目录中的文件执行任务
    对于(*.mp4)中的/R%%f,请执行以下操作(
    rem//从文件中提取数据并将其保留在已创建的输出文件夹中
    启动“/w”Sample.exe”--剪辑“%%f”--详细2--outDir输出
    rem//这将进入已创建的输出文件夹,并对数据进行填充
    开始“/w”C:\Users\user\Documents\winPython\winPython-64bit-3.4.4.2\python-3.4.4.amd64\python.exe”“%CD%\DoStuff.py”“%CD%\output\folder\folder2\Do.file”
    rem//这应该用时间戳重命名文件夹
    将“输出”重命名为“输出”-!日期:~4,2!-!日期:~7,2!-!日期:~10,4!-时间:~0,2!!时间:~3,2!”
    电话:SUB
    echo您可以安全地使用此名称!文件名!创建新文件
    )
    端部
    退出/B
    :SUB
    rem//这就是我的研究结果,它在时间戳中增加了一个数字,但不起作用
    设置/a N=0
    设置“文件名=输出-%date:~4,2%-%date:~7,2%-%date:~10,4%\u时间:~0,2%%时间:~3,2%。%N%
    :循环
    设置/a N+=1
    设置“文件名=输出-%date:~4,2%-%date:~7,2%-%date:~10,4%\u时间:~0,2%%时间:~3,2%。%N%
    如果存在“%FILENAME%”转到:循环
    退出/B
    
    1。不要在循环中使用
    goto
    ,因为它会中断循环上下文;您可以将包含
    goto
    的代码和标签放入
    调用
    子例程中。2.避免评论(实际上是反对的)
    ::Loop to perform tasks on files in current directory
    for /R %%f in (*.mp4) do (
    
    ::Extracts data from file and leaves it in a created output folder
    start "" /w Sample.exe --clip "%%f" --verbose 2 --outDir output
    
    ::This goes in created output folder and does stuff to data
    start "" /w C:\Users\user\Documents\winPython\WinPython-64bit-3.4.4.2\python-3.4.4.amd64\python.exe "%CD%\DoStuff.py" "%CD%\output\folder\folder2\Do.file" 
    
    ::This is supposed to rename the folder with a time stamp   
    rename output output-%date:~4,2%-%date:~7,2%-%date:~10,4%_at_%time:~0,2%%time:~3,2%
    
    
    
    ::This is what my research came to, which increments a number in the timestamp but doesnt work
    set N=0
    set FILENAME=output-%date:~4,2%-%date:~7,2%-%date:~10,4%_at_%time:~0,2%%time:~3,2%.%N%
    :loop
    set /a N+=1
    set FILENAME=output-%date:~4,2%-%date:~7,2%-%date:~10,4%_at_%time:~0,2%%time:~3,2%.%N%
    if exist %FILENAME% goto :loop
    
    echo You can safely use this name %FILENAME% to create a new file 
    
    
    )