首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建一个遵循编号顺序的目录?

如何创建一个遵循编号顺序的目录?
EN

Stack Overflow用户
提问于 2011-09-01 15:03:17
回答 3查看 1.8K关注 0票数 0

我想写一个记录数据的批处理文件。每次它运行时,它都应该将数据记录在一个新的、顺序编号的目录中。

如果我是在BASH做这件事的话,我只会这样做:

代码语言:javascript
运行
复制
~/$ for i in {1..25}; do if [[ ! -d log-$i ]]; then mkdir log-$i; break; fi; done; echo "log-$i"
log-1
~/$ for i in {1..25}; do if [[ ! -d log-$i ]]; then mkdir log-$i; break; fi; done; echo "log-$i"
log-2
~/$ for i in {1..25}; do if [[ ! -d log-$i ]]; then mkdir log-$i; break; fi; done; echo "log-$i"
log-3

在Windows (XP或最近的)批处理编程中,这等同于什么?

编辑

这是我所实现的,但它并没有实现我希望的那样:

代码语言:javascript
运行
复制
set "UNIT_ID=00534"
echo Check Thermo-Cal
IF NOT EXIST "C:\Thermo-Cal\NUL" "md C:\Thermo-Cal"
echo Check Thermo-cal\%UNIT_ID%
IF NOT EXIST "C:\Thermo-Cal\%UNIT_ID%\NUL" "md C:\Thermo-Cal\%UNIT_ID%"
FOR /L %%F IN (1,1,99) DO (
    IF NOT EXIST "C:\Thermo-Cal\%UNIT_ID%\log-%%F\NUL"  (
        "md C:\Thermo-Cal\%UNIT_ID%\log-%%F"
        set "LOG_DIR=C:\Thermo-Cal\%UNIT_ID%\log-%%F"
        goto dir_set
    ) 
)
echo "Couldn't create a directory to save stuff."
goto :EOF
:dir_set
echo "Stuff will get saved in: %LOG_DIR%"

在Windows 7 (cmd)上运行提供:

代码语言:javascript
运行
复制
c:\batch\log-dir.bat
Check Thermo-Cal
The filename, directory name, or volume label syntax is incorrect.
Check Thermo-Cal\00534
The filename, directory name, or volume label syntax is incorrect.
The filename, directory name, or volume label syntax is incorrect.
"Stuff will get saved in: C:\Thermo-Cal\00534\log-1"

第一次运行批处理文件时,将创建log-1。第二次运行该命令会产生完全相同的结果,我希望它能够创建log-2

关闭@echo off显示,循环从未提前爆发,运行(在本例中) 99次。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-01 19:08:17

这在Windows 7上有效:

代码语言:javascript
运行
复制
set "UNIT_ID=00534"
echo Check Thermo-Cal
IF NOT EXIST C:\Thermo-Cal\NUL md C:\Thermo-Cal
echo Check Thermo-cal\%UNIT_ID%
IF NOT EXIST C:\Thermo-Cal\%UNIT_ID%\NUL md C:\Thermo-Cal\%UNIT_ID%
FOR /L %%F IN (1,1,99) DO (
    IF NOT EXIST C:\Thermo-Cal\%UNIT_ID%\log-%%F\NUL  (
        md C:\Thermo-Cal\%UNIT_ID%\log-%%F
        set "LOG_DIR=C:\Thermo-Cal\%UNIT_ID%\log-%%F"
        goto dir_set
    ) 
)
echo "Couldn't create a directory to save stuff."
goto :EOF
:dir_set
echo "Stuff will get saved in: %LOG_DIR%"
票数 0
EN

Stack Overflow用户

发布于 2011-09-01 15:47:12

代码语言:javascript
运行
复制
FOR /L %%F IN (1,1,25) DO (
 IF "condition" "md C:\some\folder\log-%%F"
 ECHO log-%%F
 PAUSE
)

插入暂停,以便在每个输出移动到下一个序列号之前看到它。在完成脚本时删除“暂停”。

编辑:添加如果不存在的条件

代码语言:javascript
运行
复制
FOR /L %%F IN (1,1,25) DO (
 IF NOT EXIST "C:\some\folder\log-%%F\NUL" "md C:\some\folder\log-%%F"
 ECHO log-%%F
 PAUSE
)

在目录上使用“如果不存在”语句时,必须将.\NUL指定为文件,因为Windows通常只传递文件上的条件,而不是文件夹。在Windows中,NUL文件始终存在于现有目录中。

EDIT2:使日志%F在循环之外可访问

代码语言:javascript
运行
复制
FOR /L %%F IN (1,1,25) DO (
 IF NOT EXIST "C:\some\folder\log-%%F\NUL" ("md C:\some\folder\log-%%F" && SET dir%%F=C:\some\folder\log-%%F)
)
ECHO %dir1%
ECHO %dir2%
ECHO %dir3%

将其插入批处理文件并进行尝试。

票数 1
EN

Stack Overflow用户

发布于 2011-09-01 19:08:43

在使用引号时必须小心,就像在批脚本中一样,引用的内容可以看作是文字字符串,而不是代码。

代码语言:javascript
运行
复制
set "UNIT_ID=00534"
echo Check Thermo-Cal
IF NOT EXIST "C:\Thermo-Cal\NUL" (md C:\Thermo-Cal)
echo Check Thermo-cal\%UNIT_ID%
IF NOT EXIST "C:\Thermo-Cal\%UNIT_ID%\NUL" (md C:\Thermo-Cal\%UNIT_ID%)
FOR /L %%F IN (1,1,99) DO (
    IF NOT EXIST "C:\Thermo-Cal\%UNIT_ID%\log-%%F\NUL" (
        md C:\Thermo-Cal\%UNIT_ID%\log-%%F
        set LOG_DIR=C:\Thermo-Cal\%UNIT_ID%\log-%%F
        goto dir_set
    ) 
)
echo "Couldn't create a directory to save stuff."
goto :EOF
:dir_set
echo Stuff will get saved in: %LOG_DIR%
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7272285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档