如何删除命令行窗口中显示的错误和命令?

时间:2018-01-26 10:20:43

标签: windows batch-file command-line

基于互联网上的几篇文章,我写了一个批处理脚本:

  • 扫描定义的位置,查找.png文件,
  • 为每个文件创建新位置的路径(.. \文件名的前4个字符\文件名的前9个字符)
  • 将文件移至新位置

脚本工作正常,但我希望它停止在命令行窗口中显示错误和命令并显示" PROCESSING ..."代替?我已经尝试了echo off,> nul和2> nul但没有成功。

这是脚本:

@echo off
setlocal enabledelayedexpansion
cls

pushd E:\Archiwum\
for /f "tokens=*" %%1 in ('dir /a-d /b E:\Archiwum\*.png') do (
    set filename=%%1&set dirname=!filename:~0,4!\!filename:~0,9!

    if not exist E:\Archiwum\!dirname! (md E:\Archiwum\!dirname!)
    move %%1 E:\Archiwum\!dirname!\
)

2 个答案:

答案 0 :(得分:0)

在这里快速重写您的脚本

@Echo Off
If Exist "E:\Archiwum\*.png" (CD /D "E:\Archiwum") Else Exit /B
SetLocal EnableDelayedExpansion
ClS
For %%A In (*.png) Do (Echo Processing %%A
    Set "filename=%%~nA"
    Set "dirname=!filename:~,4!\!filename:~,9!"
    If Not Exist "!dirname!\" MD "!dirname!"
    If Exist "!dirname!\%%A" (Echo Name conflict %%A already exists.
    ) Else Move "%%A" "!dirname!" > Nul)

您需要注意文件名中的空格,以防止目录名称带有尾随空格以及我在评论中提到的其他内容。

答案 1 :(得分:0)

感谢您的反馈。我对你的解决方案做了两处修改,现在它运行得很好。

@Echo Off
If Exist "C:\Archiwum\*.png" (CD /D "C:\Archiwum") Else Exit /B
SetLocal EnableDelayedExpansion
ClS
@Echo Processing...
@Echo Off
For %%A In (*.png) Do (
    Set "filename=%%~nA"
    Set "dirname=!filename:~,4!\!filename:~,9!"
    If Not Exist "!dirname!\" MD "!dirname!"
    If Exist "!dirname!\%%A" (Echo Name conflict %%A already exists.
    ) Else Move "%%A" "!dirname!" > Nul)
  1. 我添加了第二个@Echo Off - 没有来自for循环的命令仍在命令窗口中显示。
  2. 我移动了@Echo Processing,因为我希望它只在后台完成所有操作时显示一次。
  3. 非常感谢你的帮助。