我正在研究批处理文件编程。命令DIR %1
无效。这是为什么?请帮帮我。
REM this batch file will make
REM the data in a file difficult to recover.
DIR %1 PAUSE You are going to kill the file %1 Are you sure?
ECHO > %1
DEL %1
我通过将其保存为.bat文件来执行此代码。
答案 0 :(得分:1)
DIR %1 PAUSE You are going to kill the file %1 Are you sure?
等等什么?这条线本身有一些错误,
1:将dir
命令和pause命令与&
或&&
分开,&
无需小心运行下一个命令,&&
运行它如果之前的命令成功,或者只是将pause
移动到新行
2:在%1
周围添加引号,例如"%1"
,然后使用%~1
转义可能在其周围的任何引号(因此不会引用双引号),用作"%~1"
。这可以应用于您的删除命令,也可能是重定向。
3:pause命令不支持这样的自定义文本,你必须在pause命令之前在一行上回显提示,或者如果需要,choice
命令可以使用。 (choice /?
)中的/p
或set /?
选项
4:虽然不是错误,为什么要在删除之前覆盖它? 如果您非常愿意擦拭它,我建议通过以下方式将其作为零字节文件:
type nul >"%~1"
:: Then deleting normally;
del "%~1"
或者至少使用`echo:>"%~1"
最后,假设在调用文件时通过引用提供的路径,这应该更好一些;
dir "%~1"
pause Are you sure you want to delete [%~1]?
pause
echo:>"%~1"
del "%~1"
或者通过简单的提示
dir "%~1"
echo Are you sure you want to clear [%~1]'s content?
set /p "confClear=y/n, default y:"
if /i "%confClear%" equ "n" (exit)
echo:>"%~1"
del "%~1"
启动文件时是否传递了引用的参数?从另一个可以完成的批处理文件:
:: Using 'call'
call "delConfirm.bat" "C:\Users\Arescet\Project\uselessFile.txt"
这将开始delConfirm.bat
,并使"%1"
等同于"C:\Users\Arescet\Project\uselessFile.txt"
,可能与您的意图相同。