![如何在 Windows 中创建文件的多个编号副本?](https://linux22.com/image/520161/%E5%A6%82%E4%BD%95%E5%9C%A8%20Windows%20%E4%B8%AD%E5%88%9B%E5%BB%BA%E6%96%87%E4%BB%B6%E7%9A%84%E5%A4%9A%E4%B8%AA%E7%BC%96%E5%8F%B7%E5%89%AF%E6%9C%AC%EF%BC%9F.png)
我有一个名为 poll001.html 的文件,需要创建 100 个以递增方式命名的副本(即 poll002.html、poll003.html 等)。我知道这很愚蠢,但这正是老板想要的。有没有关于这个的建议,无论是使用脚本、命令行还是 Python?再次抱歉,这是一个荒谬的要求。
答案1
一些批处理。用源文件名替换“source-file.html”。这也会删除前导零。将其保存为 .BAT 或 .CMD 并开始运行。
@echo off
for /L %%i IN (1,1,100) do call :docopy %%i
goto :EOF
:docopy
set FN=00%1
set FN=%FN:~-3%
copy source-file.html poll%FN%.html
编辑:
为了按照 sysadmin1138 的答案解决一个不太普遍的情况:
@echo off
for /L %%i IN (1,1,9) do copy source-file.html poll00%%i.html
for /L %%i IN (10,1,99) do copy source-file.html poll0%%i.html
copy source-file.html poll100.html
答案2
以下 powershell 单行命令应该可以解决问题:
2..100 | %{cp poll001.html ("poll{0:D3}.html" -f $_)}
答案3
批处理文件应该可以做到这一点。从我的脑海中浮现:
for /L %%N in (1,1,100) do echo <html></html> > poll%%N.html
输入前导零会有点棘手,但这样应该可以做到。如果您需要这些零,
for /L %%N in (1,1,9) do echo <html></html> > poll00%%N.html
for /L %%N in (10,1,99) do echo <html></html> > poll0%%N.html
echo <html></html> > poll100.html
如果在批处理文件中使用,则需要在 N 前面加上两个百分号。如果直接从 cmd 提示符运行,则使用一个百分号 (%N)。
答案4
这是非常快的(未经测试)版本的 C# 代码,
您提到了 python,不幸的是这不是您可以尝试转换为 python。或者如果有人可以解释如何在 powershell 中运行它。
using System;
using System.IO;
namespace TestnaKonzola
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter The First file name:");
string firstFile = Path.Combine(Environment.CurrentDirectory, Console.ReadLine());
Console.WriteLine("Enter the number of copyes:");
int noOfCopy = int.Parse(Console.ReadLine());
string newFile = string.Empty;
for (int i = 0; i < noOfCopy; i++)
{
newFile = NextAvailableFilename(firstFile);
Console.WriteLine(newFile);
File.Copy(firstFile, newFile);
}
Console.ReadLine();
}
public static string NextAvailableFilename(string path)
{
// Short-cut if already available
if (!File.Exists(path))
return path;
// If path has extension then insert the number pattern just before the extension and return next filename
if (Path.HasExtension(path))
return GetNextFilename(path.Insert(path.LastIndexOf(Path.GetExtension(path)), numberPattern));
// Otherwise just append the pattern to the path and return next filename
return GetNextFilename(path + numberPattern);
}
private static string numberPattern = "{000}";
private static string GetNextFilename(string pattern)
{
string tmp = string.Format(pattern, 1);
if (tmp == pattern)
throw new ArgumentException("The pattern must include an index place-holder", "pattern");
if (!File.Exists(tmp))
return tmp; // short-circuit if no matches
int min = 1, max = 2; // min is inclusive, max is exclusive/untested
while (File.Exists(string.Format(pattern, max)))
{
min = max;
max *= 2;
}
while (max != min + 1)
{
int pivot = (max + min) / 2;
if (File.Exists(string.Format(pattern, pivot)))
min = pivot;
else
max = pivot;
}
return string.Format(pattern, max);
}
}
}