gpt4 book ai didi

windows - 如何使用用户输入的文件名和文件号创建 1 到 N 个文件?

转载 作者:可可西里 更新时间:2023-11-01 11:45:21 26 4
gpt4 key购买 nike

明天我有一个非常重要的家庭作业。我必须创建一个批处理文件。

批号必须要求用户输入姓名和编号。该数字必须大于 0 且小于 100。

假设用户输入 hello2。然后批处理文件应在当前目录中创建两个文件 hello_1.txthello_2.txt

问题是我不知道该怎么做,但它真的很重要。我上周一直在医院。所以我不能去上学,错过了那些类(class)。

cmd 窗口应该类似于:

hello 2 

Creation of 2 files:

hello_1.txt
hello_2.txt

这是我已经拥有的:

@echo off

set /p text=Enter a name
set /p number=Enter a number
set /a N=%number%
if %N% LSS 1 goto error
if %N% GTR 99 goto error
for /l %%i in (1,1,%N%) do (
mkdir %text%_%N%.txt
)
goto end

:error
echo Check your number (between 1 and 100)

:end
echo Script OK

最佳答案

此任务的批处理文件的简单版本不会针对无效输入进行故障保护。

@echo off
set /P "text=Enter a name: "

:PromptNumber
set /P "number=Enter a number: "
set /A N=number 2>nul
if %N% LSS 1 goto PrintError
if %N% GTR 99 goto PrintError

echo/
for /L %%I in (1,1,%N%) do echo Create "%text%_%%I.txt" 2>"%text%_%%I.txt"
echo/
pause
goto :EOF

:PrintError
echo/
echo Check your number which must be between 1 and 100.
echo/
goto PromptNumber

如果由于用户根本没有输入任何内容而在提示用户后未定义环境变量 number,则将值 0 分配给环境变量 N 。如果输入的字符串不是有效的十进制、八进制或十六进制数,也会发生这种情况。通过将错误消息重定向到设备 NUL 来抑制处理无效数字字符串上的 STDERR 的错误消息输出。

带有选项 /LFOR 循环用于创建从 1 开始的文件,步长为 1 到 N 的值。

ECHO 命令输出当前创建的文件。 ECHO 命令没有错误输出,因为它不会失败,这使得它成为通过重定向 STDERR 命令创建文件大小为 0 字节的文件的理想选择>ECHO 到要创建的文件。

我还有第二个版本,它可以更安全地防止无效或意外输入。我不建议将它呈现给您的老师,因为显然批处理文件编码的新手没有编写过它。

@echo off
setlocal EnableExtensions EnableDelayedExpansion

:PromptName
set "FileName="
echo/
set /P "FileName=Enter a name: "

rem Has the user entered anything at all?
if not defined FileName goto PromptName

rem Remove all double quotes from file name string?
set "FileName=!FileName:"=!"

rem Is the file name string now an empty string?
if not defined FileName goto PromptName

rem The string can be still invalid as file name. So check on
rem first file creation if the file could be created successfully.
(set /P FileNumber=<nul >"!FileName!_1.txt") 2>nul
if not exist "!FileName!_1.txt" (
echo/
echo The string !FileName! is most likely not valid for a file name.
goto PromptName
)

:PromptNumber
set "FileNumber="
echo/
set /P "FileNumber=Enter a number in range 1 to 99: "

rem Has the user entered anything at all?
if not defined FileNumber goto PromptNumber

rem Has the file number string any other character than digits?
for /F "delims=0123456789" %%I in ("!FileNumber!") do (
echo/
echo !FileNumber! is not a valid decimal number.
goto PromptNumber
)

rem It is safe now to reference the file number consisting
rem only of digits 0-9 without usage of delayed expansion.

rem Has the file number more than two digits?
if not "%FileNumber:~2%" == "" (
echo/
echo %FileNumber% has more than two digits.
goto PromptNumber
)

rem Remove first digit of number if the number has two digits and
rem the first digit is 0 to get the number later always interpreted
rem as expected as decimal number and not as octal number.
if not "%FileNumber:~1%" == "" if "%FileNumber:~0,1%" == "0" set "FileNumber=%FileNumber:~1%"

rem The file number is now in range 0 to 99. But 0 is not allowed.
if "%FileNumber%" == "0" (
echo/
echo Number 0 is not in valid range.
goto PromptNumber
)

rem Create the remaining files. The first one was created already before.
echo/
echo Create "!FileName!_1.txt"
for /L %%I in (2,1,%FileNumber%) do echo Create "!FileName!_%%I.txt" 2>"!FileName!_%%I.txt"
echo/
endlocal
pause

要了解使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • echo/?
  • endlocal/?
  • for/?
  • goto/?
  • 如果/?
  • 暂停/?
  • rem/?
  • 设置/?
  • setlocal/?

另请阅读有关 Using Command Redirection Operators 的 Microsoft 文章,并查看 Microsoft 的 command-line reference 以及 SS64 的 A-Z index of the Windows command line 。 DosTips 论坛主题 ECHO. FAILS to give text or blank line - Instead use ECHO/ 解释了为什么在两个批处理文件中使用 echo/ 而不是常用的 echo. 来打印一个空行到控制台。

关于windows - 如何使用用户输入的文件名和文件号创建 1 到 N 个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47250658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com