编写批处理文件以输入路径和文件名,获取文件的大小和日期,然后排序

时间:2015-05-11 02:53:18

标签: batch-file

我创建了一个包含路径和文件名的文件。 我通过命令行传递文件名,一次一个我的批处理文件。 我使用%~1,%~t1,%~z1来获取时间和大小值。 我想将每个记录写入文件进行排序。时间和文件大小将不同,我想保存具有最佳信息的版本。

我在批处理文件中遇到问题以获取大小和日期。我试图测试我是否在读取文件信息时出错。当我查看参数时,它总是包含传递给批处理文件的路径文件名。当打印%~t1%_ z1值时,如果每件事都正常,我会看到正确的值,否则打印只显示time =和size =。因此,我尝试使用文件大小或时间值来确定是否存在错误。

我尝试了许多不同的方法来使用IF cmd来打印出是否发生了错误。我暂时没有使用批处理文件,我无法弄清楚导致问题的原因。

这是批处理文件的片段(我尝试了一些事情):

@echo off

rem if [%~z1] == []
rem if [NOT] %~t1
rem if ["%~t1]==[]
rem if exist [%~1] 
 str1 = %~t1
 if not definded str1 (echo str1 error)
 if not definded str1
(   print "AN ERROR OCURRED  FOR THIS FILE/n"  )
else
(   
    echo fpath =%~1 
    echo time = %~t1   
    echo size = %~z1   
)

我明白了:

  • )此时出人意料
  • 该命令的语法不正确
  • 此时EXIST意外发生
  • 无法初始化设备PRN。 'else'未被识别为内部或外部命令
  • str1未被识别为内部或外部命令,..此时str1是意外的

这些可能是我的错误,但搜索许多信息网站并没有在我脑子里敲响我的错误。

任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:0)

您要查找的短语是if defined。 Definded不是一个词。

您必须使用set命令在变量中存储值,因此您的第一行必须为set str1=%~t1

if语句需要(if在同一行。同样,)else(必须全部位于同一行。

Print在技术上是一个有效的批处理命令,但它会将文档发送到打印机;批处理使用echo向屏幕显示文本,换行符自动附加到回显行。

@echo off
set str1=%~t1

if not defined str1 (
    echo AN ERROR OCCURRED FOR THIS FILE
) else (
    echo fpath=%~1
    echo time=%~t1
    echo size=%~z1
)

答案 1 :(得分:0)

我终于想出了如何让它发挥作用。我发现一个帖子表明括号需要采用那种确切的格式,否则它根本不起作用。即使在语句的IF部分周围放置括号也会阻止脚本按预期工作。

IF语句本身更容易处理。例如,要检查空参数,可以使用以下任一方法:

如果"%~t1" =="" (     echo"这个文件的错误/ n"
)否则(
    echo fpath =%~1     回声时间=%~t1
    回声大小=%~z1