命令“DIR%1”无效..(批处理文件编程)

时间:2016-03-30 18:00:40

标签: batch-file

我正在研究批处理文件编程。命令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文件来执行此代码。

1 个答案:

答案 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 /?)中的/pset /?选项

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",可能与您的意图相同。