windows - 如何在 Windows CMD 中检查覆盖文件请求的结果?

标签 windows batch-file cmd

我在网上搜索过这个问题,但似乎找不到答案。我有代码在询问一个人他/她想给文本文件起什么名字后创建一个文本文件。该文件在创建后将被打开。但是,如果我对覆盖请求选择 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/

相关文章:

c# - 如何在 VS2013 的开发人员命令提示符中打开并运行 devenv\build 命令?

arrays - 多行批量创建数组

windows - 使用批处理从文件中读取带有空格的行

python - 激活virtualenv时如何不显示路径

c++ - 当用户按下 Ctrl 并单击时获取鼠标坐标

windows - 如何在 Windows XP、2003、7、2008 下以编程方式添加其他打印机驱动程序 (x86/x64)

c - Windows 上多线程应用程序中非阻塞服务器/监听套接字的最佳方法?

java - ProcessBuilder 执行自定义可执行文件

c - 通过脚本在 Windows 中打开文件

batch-file - XCOPY 中带空格的文件夹名称不起作用?