2015-11-25 44 views
0

我有这样的命令:1创建一个文本文件1,并将其保存到目录

For /l %%n in (1,1,1) do echo welcome >> "C:\Users\Documents\Backup\TestingFile%%n.txt" 

它创建了一个文件,当你下一次运行它,它会覆盖。它应该在每次运行时创建一个文件。 例如,你运行一个脚本两次它应该2个文件,但它不。

任何人都可以帮我吗?

+1

'>>附加到指定的文件。如果您想替换以前的文件,请改用'>'。 –

+2

文件名中的唯一变量是'%% n',它总是相同的(在这种情况下为1,但如果从1-5开始运行循环,它将始终为这些值),因此相同的文件名将会使用。如果每次都想生成新文件,则需要引入更多变量(例如时间戳)。 –

+0

@JasonFaulkner你可以帮我添加一个时间戳变量2分钟使用上述命令。 – Shaw

回答

0

原来你是问FOR命令来算...
从一个
步进开始通过一个
的一个结局。

所以FOR做的是你问它它,所以得到只有一个文件类型是有道理的。我们暂时忽略文件输出部分,看看FOR正在做什么。

下面是FOR命令/ s的帮助文本的摘录:

C:\tmp>for /? 
...etc... 
FOR /L %variable IN (start,step,end) DO command [command-parameters] 
    The set is a sequence of numbers from start to end, by step amount. 
    So (1,1,5) would generate the sequence 1 2 3 4 5 and (5,-1,1) would 
    generate the sequence (5 4 3 2 1) 

只是为了好玩,让我们跳过了“写入文件的一部分”,并看看for循环正在做... 原来的循环首先是欢迎,然后稍微修改一个“更受欢迎” 有意义吗?

C:\tmp>type foo.bat 
echo off 
For /l %%n in (1,1,1) do echo welcome, n=%%n 
For /l %%n in (1,1,3) do echo ** more welcome, n=%%n ** 


C:\tmp>foo.bat 

C:\tmp>echo off 
welcome, n=1 
** more welcome, n=1 ** 
** more welcome, n=2 ** 
** more welcome, n=3 ** 
C:\tmp> 
0

如果你想在批处理文件来创建一个新的文件,每次运行它时,你需要先检查所有以前的文件的存在时间。

@echo off 
set num=0 
:LOOP 
set /a num+=1 
IF EXIST "C:\Users\Documents\Backup\TestingFile%num%.txt" GOTO LOOP 
echo welcome >"C:\Users\Documents\Backup\TestingFile%num%.txt" 

此代码中的漏洞,虽然是,如果你已经创建4个文件,有人删除文件2或3,运行时,它会创建一个文件,而不是文件的下一次5

+0

如果我想让用户在创建文件时命名文件,请告诉我如何让用户命名该文件?谢谢你的代码 – Shaw

+0

@emraan,你可以使用'SET'命令和'/ P'选项来提示用户输入。 http://ss64.com/nt/set.html – Squashman

相关问题