【问题标题】:Batch File: If file doesn't exist, create, if file does exist create a new one, compare two files, and delete the largest one批处理文件:如果文件不存在,则创建,如果文件存在则创建一个新文件,比较两个文件,并删除最大的一个
【发布时间】:2015-07-14 12:00:19
【问题描述】:

我想创建一个批处理文件,将 reg 密钥导出到服务器上的文件夹,但该文件还需要在前后执行一些检查。

目前我有:

regedit /e "\\pdc\users\%username%\application data\printer registration.reg" "HKEY_CURRENT_USER\Software\Generic"

以上方法可以完美地导出注册表项,但是由于这个批处理文件将被转换为登录脚本,我希望它更聪明一点。

1:需要判断该目录下是否已经存在“Printer Registration.reg”,如果该文件不存在,则必须继续创建该文件“Printer Registration.reg”,然后进入下面的编号“#2”。

如果文件已经存在,脚本必须将注册表项导出到名为“Printer Registration2.reg”的文件中,然后检查刚刚创建的文件是否大于 625kb。如果文件大于 625kb,或者与已作为“Printer Registration.reg”存在的文件大小相同,请删除“Printer Registration2.reg”。

如果小于 625kb 且文件大小与“Printer Registration.reg”不同,则必须删除“Printer Registration.reg”并重命名“Printer Registration2.reg”到“Printer Registration.reg”。

#2:然后必须将生成的文件复制到用户的 Windows 7 桌面。

如果有人能帮助我完成这项任务,我将永远感激不尽。

问候

【问题讨论】:

    标签: windows batch-file printing


    【解决方案1】:

    你可以试试这样的,

    @echo off
    setlocal enabledelayedexpansion
    net use A: "\\pdc\users\%username%\application data\" /persistent:no >> nul
    set maxbytesize=625000
    Set File1=printer_registration.reg
    Set File2=printer_registration2.reg
    
    :FILE_CHECK
    if exist "\\pdc\users\%username%\application data\printer registration.reg" (
        regedit /e "\\pdc\users\%username%\application data\printer registration2.reg" "HKEY_CURRENT_USER\Software\Generic"
    ) else (
        regedit /e "\\pdc\users\%username%\application data\printer registration.reg" "HKEY_CURRENT_USER\Software\Generic"
        GOTO Copy_Final
    )
    
    :CHECK SIZE
    CD A:
    FOR /F "usebackq" %%A IN ('%file1%') DO set size1=%%~zA
    FOR /F "usebackq" %%B IN ('%file2%') DO set size2=%%~zB
    
    :Compare
    if %size2% GTR %maxbytesize% (
        Del "\\pdc\users\%username%\application data\printer_registration2.reg"
        goto Copy_Final
    ) 
    if %size2% EQU %size1% (
        Del "\\pdc\users\%username%\application data\printer_registration2.reg"
        goto Copy_Final
    ) ELSE (
        Del "\\pdc\users\%username%\application data\printer_registration.reg"
        Ren "\\pdc\users\%username%\application data\printer_registration2.reg" "\\pdc\users\%username%\application data\printer_registration.reg"
        goto Copy_Final
        )
    
    :Copy_Final
    Copy "\\pdc\users\%username%\application data\printer registration.reg" %userprofile%\desktop
    
    net use A: /delete /y
    

    【讨论】:

    • 好的,我现在就试试这个,看看效果如何。
    • 它一直有效到 :Compare。它在该点关闭而不进行任何进一步的操作,例如 :Copy_Final 部分。
    • 没有错误信息,它只是关闭。我在 :Check Size 部分之后暂停了,这暂停得很好。然后我尝试在 :Compare 部分之后暂停,但它从来没有,它只是完全关闭了框。
    • :Compare 之前添加Echo %size1% %size2% 并查看我的答案中的输出代码也已编辑
    • 我已经这样做了,它只是说 ECHO 已开启。不过,在它上面,我可以看到两行写着“set size1=”和“set size2=”,因为它运行第一行:Compare,我设法在屏幕关闭之前打印屏幕。 '它说此时 625000 是出乎意料的。 if GTR 625000' 是不是没有计算大小?
    猜你喜欢
    • 2016-06-18
    • 2012-04-08
    • 2015-08-31
    • 2011-01-19
    • 2013-09-18
    • 2014-01-02
    • 1970-01-01
    相关资源
    最近更新 更多