我在网上搜索过这个问题,但似乎找不到答案。我有代码在询问一个人他/她想给文本文件起什么名字后创建一个文本文件。该文件在创建后将被打开。但是,如果我对覆盖请求选择 N(否),我不想打开该文件。相反,我希望在对覆盖请求说 N(否)后再次被要求指定另一个文件名。
但是我不知道如何检查给覆盖请求的答案。
此外,我需要将整个代码放在一行中。
这是我所拥有的,没有上面提到的额外内容:
cmd /c @ECHO OFF & SET /P filename=What File name: & cmd /v /c copy /-y NUL !filename!.txt & cmd start /v /c start notepad !filename!.txt & Exit
后来添加:
我正在处理以下问题,并在回显文件名后不断收到错误消息“(此时是意外的。”。如果我通过注释部分来编辑文件以使其工作,然后继续编辑它对于我目前拥有的,它仍然有效。但是,如果我退出 cmd 框,然后再次启动它,那么它就不起作用,我收到一条错误消息。这是到目前为止的代码:
@echo off
SET /P filename=What File name?
echo %filename%
::loop
if exist !filename!.txt (
echo File Exists
SET /P overwrite=Overwrite File?
echo overwrite is %overwrite%
If %overwrite%==Y (
echo "Yes, Y"
)
)
echo finish
如果我在 If '%overwrite%'==Y
中将 %overwrite%
加上单引号,我就不会再收到意外错误消息。我仍然面临的问题是当退出 session /cmd 框时,我无法让上面的行回应覆盖的值。它只是说“覆盖是”(没有引号,后面没有任何值(value))。如果我在同一个 session 中继续再次运行批处理文件,我会得到一个覆盖值。
无法从 if 语句回显 %overwrite%
(用户输入)的值的解决方案可以找到 here .
最佳答案
编辑以适应评论
cmd /v:on /q /c "for /l %a in (0 0 1) do (set /p "file=file? " & if exist "!file!" ( set "q=" & set /p "q=overwrite? " & if /i "!q!"=="y" ( type nul > "!file!" & start "" notepad "!file!" & exit ) ) else ( type nul > "!file!" & start "" notepad "!file!" & exit ))"
按照要求,在一行中。要将其包含在批处理文件中,请将 %a
替换为 %%a
编辑 一行,在文件操作中添加输入验证和错误检查,并缩短(减少变量长度,删除不需要的空格,删除文件创建代码,...)以适应窗口“运行”对话框
已编辑 添加初始 cd/d "%userprofile%"
以确保工作文件夹可写。为什么?因为从 windows 7 开始,在从 windows 运行对话框调用 cmd
时包括 /v:on
(或关闭)(单行的 OP 原因),该命令的事件目录是 c:\windows\system32
(或系统所在的任何位置)。如果没有 /v
开关,事件目录就是用户配置文件文件夹。
cmd /v:on /q /c "cd/d "%userprofile%"&for /l %a in () do ((set/p"f=file? "||set "f=")&(if defined f if exist "!f!" ((set/p"q=overwrite? "||set "q=0")&if /i not "!q!"=="y" (set "f=")))&if defined f (type nul>"!f!" &&(start "" notepad "!f!" &exit)))"
已编辑 经过大量测试,我让它在 XP 中失败。如果机器配置为禁用命令扩展,则前面的代码将失败。此外,Ctrl-C
的问题可能很烦人。这应该可以解决第一个问题并最大限度地减少第二个问题。
cmd /v:on /e:on /q /c "cd/d "%userprofile%"&for /l %a in ()do ((set/p"f=file? "||(set f=&cd.))&(if defined f if exist "!f!" ((set/p"q=overwrite? "||(set q=&cd.))&if /i not "!q!"=="y" (set f=)))&if defined f (cd.>"!f!"&&(start "" notepad "!f!" &exit)))"
关于windows - 如何在 Windows CMD 中检查覆盖文件请求的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24034608/