dos 命令 for循环 判断路径中包含某字符并移动文件

文章描述了一个脚本,用于检查文件夹结构,移动符合条件的文件(如不包含特定字符串的文件),并执行一些操作(如删除、复制和清理),最终用于更新程序。脚本涉及GBK编码处理和多线程执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.

SET GenFolder= C:\Users\administered\Desktop\t2\old_file
set path1=C:\Users\administered\Desktop\t1\crontab_master
set path2=C:\Users\administered\Desktop\t2\old_file
if not exist %GenFolder% (
        echo %GenFolder%目录不存在,已创建该目录!
        md %GenFolder%
        move /y %path1% %path2%
    ) else (
       echo %GenFolder%目录存在,直接移动
        if "%path1:crontab_master=%"=="%path1%" (

                echo 路径%path1% 中不包含字符串crontab_master
                echo no
          ) else (
                 echo 移到文件夹%path1% 到 %path2%
                 move /y %path1% %path2%
            )
)

if not exist %GenFolder% 判断文件夹是否存在,md %GenFolder% 文件夹不存在时则创建,

move /y %path1% %path2% 将path1下的文件移动到path2, /y 直接移动覆盖,不进行提示。

if "%path1:crontab_master=%"=="%path1%" 判断path1路径中是否包含字符串'crontab_master',如果包含改字符串则移动path1下的文件

echo 输出打印

2. 循环当前文件夹将指定文件移到另一个文件夹中

current_file_path = os.path.dirname(os.path.realpath(sys.argv[0]))
old_path_test = os.path.join(current_file_path , 'old_filename')

@echo off & setlocal enabledelayedexpansion

if not exist %GenFolder% (
        echo %old_file%目录不存在,已创建该目录!
        md %old_file%
    )

for /D %%a in (f"{old_path_test }") do (
 set str1=%%a
    if "!str1!" == "!str1:old_file=!" if "!str1!" == "!str1:crontab_master=!" (
     echo 删除不包含old_file,不包含crontab_master的文件夹: %%a

          ::rmdir /s /q "%%a"
          move /y "%%a" %C:\Users\administered\Desktop\t\old_file%

          :: if exist "%%a" echo 未移到成功 &  rmdir /s /q "%%a"

        if exist "%%a" echo 未移到成功
  )
)

for %%a in (f"{old_path_test }") do (
 set str1=%%a
    if "!str1!" == "!str1:bat=!" if "!str1!" == "!str1:whl=!" (
     echo 删除不包含bat, 不包含whl的文件: %%a 

                :: del /s /q "%%a" 
                move /y "%%a" %C:\Users\administered\Desktop\t\old_file%
  )
)

多个条件if判断写并列, :: 表示注释, rmdir 删除文件夹, del删除单个文件,

bat 文件编码为GBKANSI,输出中文不乱码

bat_name = 'updater.bat'
bat_path = os.path.join(old_file, bat_name)
old_filename = "old_file"
old_path = os.path.join(old_file, old_filename)
if not os.path.exists(old_path):
    os.makedirs(old_path)
print('bat_path:', bat_path)
# 测试需要移到文件的路径
old_path_test = os.path.join(old_file, old_filename)
with open(bat_path, 'w', encoding='utf-8') as updater:
    updater.write(textwrap.dedent(f'''\
    @echo off & setlocal enabledelayedexpansion
    CHCP 65001
    echo 正在更新[{self.app_name}]最新版本,请勿关闭窗口...
    ping -n 2 127.0.0.1
    taskkill -f -pid {pid}
    echo 正在复制[{self.app_name}],请勿关闭窗口...
    for /D %%a in ("{old_path_test}") do (
      set str1="%%a"
        if "!str1!" == "!str1:{old_filename}=!" if "!str1!" == "!str1:{old_filename}=!" (
         echo 删除不包含old_file的文件夹: %%a
           move /y "%%a" %{old_path}%
      )
    )
    for %%i in ("{old_path_test}") DO (
        if not %%i=={bat_name} if not %%i=={old_filename}(
        echo 删除文件:%%i 
        :: del /s /q "%%i"
        move /y "%%i" %{old_path}%
        )
    )
    for %%a in ("{old_path_test}") do (
      set str1=%%a
        if "!str1!" == "!str1:{bat_name}=!" if "!str1!" == "!str1:{bat_name}=!" (
         echo 删除不包含bat的文件: %%a
           move /y "%%a" %{old_path}%
      )
    )
    ping -n 2 127.0.0.1
    xcopy /s /e /y /q "{new_file}\*" "{current_path}"
    ping -n 2 127.0.0.1
    if exist "{new_file_dir}" rd /s /q "{new_file_dir}"
    echo 更新完成,等待自动启动{self.app_name}...
    ping -n 2 127.0.0.1
    "{new_file_exe}"
    exit
    '''))
    updater.flush()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值