找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 48289|回复: 17

[文件操作] 如何批处理(bat),rar打包当前目录下的指定文件,打包名字可以自定义加文件修改日期

[复制链接]
发表于 2021-11-28 14:53:03 | 显示全部楼层 |阅读模式
本帖最后由 oyr520 于 2021-11-28 17:19 编辑

使用批处理(bat),rar打包当前目录下的指定文件,打包名字可以自定义加文件修改日期,然后在当前目录下创建user_rar文件夹存放(如果不存在则创建),谢谢解答。

比如:当前目录下有aaa.txt,bbbb.txt,ccccc.txt,ddddd.bin,这些文件修改日期是2021/11/28 11:50,运行批处理后打包这四个txt,打包的名称是DSFC_DSNB_20211128_1150.rar,然后在当前目录下创建user_rar 存放。
发表于 2021-11-28 17:13:58 | 显示全部楼层
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. cd /d "%~dp0"
  4. set files="2.txt" "cd.txt" "stdout.txt" "stderr.txt"
  5. 2>nul md user_rar
  6. for %%A in (%files%) do (
  7.   set "t=%%~tA"
  8.   set "t=!t:-=!"
  9.   set "t=!t:/=!"
  10.   set "t=!t::=!"
  11.   set "t=!t: =_!"
  12.   goto break
  13. )
  14. :break
  15. rar.exe a "user_rar\DSFC_DSNB_!t!.rar" %files%
  16. endlocal
复制代码

评分

参与人数 1技术 +1 收起 理由
oyr520 + 1 非常有用

查看全部评分

 楼主| 发表于 2021-11-28 17:32:55 | 显示全部楼层
回复 2# flashercs
感谢大佬,我测试后能生成文件夹,但文件夹里面没有rar压缩包,请帮忙再看看,谢谢!
我在C盘目录下测试的(固态硬盘没有做分区)
 楼主| 发表于 2021-11-28 20:29:42 | 显示全部楼层
尝试改为rar所在的路径也是没有rar压缩包
@echo off
setlocal EnableDelayedExpansion
Rar = "C:\Program Files\WinRAR\WinRAR.exe"
cd /d "%~dp0"
set files="2.txt" "cd.txt" "stdout.txt" "stderr.txt"
2>nul md user_rar
for %%A in (%files%) do (
  set "t=%%~tA"
  set "t=!t:-=!"
  set "t=!t:/=!"
  set "t=!t::=!"
  set "t=!t: =_!"
  goto break
)
:break
Rar a "user_rar\DSFC_DSNB_!t!.rar" %files%
endlocal
 楼主| 发表于 2021-11-28 21:11:53 | 显示全部楼层
rar.exe修改所在的路径就可以了"C:\Program Files\WinRAR\WinRAR.exe" a
发表于 2021-11-28 21:23:57 | 显示全部楼层
回复 1# oyr520


    如果那些文件修改日期不一样咋办?
 楼主| 发表于 2021-11-28 21:39:23 | 显示全部楼层
优化一下,把rar路径定义成变量调用
@echo off
setlocal EnableDelayedExpansion
cd /d "%~dp0"
set rar="C:\Program Files\WinRAR\WinRAR.exe"
set files="2.txt" "cd.txt" "stdout.txt" "stderr.txt"
2>nul md user_rar
for %%A in (%files%) do (
  set "t=%%~tA"
  set "t=!t:-=!"
  set "t=!t:/=!"
  set "t=!t::=!"
  set "t=!t: =_!"
  goto break
)
:break
%rar% a  -s "user_rar\DSFC_DSNB_!t!.rar" %files%
endlocal
 楼主| 发表于 2021-11-28 21:40:50 | 显示全部楼层
回复 6# Batcher
我也不太懂怎么处理,目前我的文件都是相同的
 楼主| 发表于 2021-11-28 22:36:43 | 显示全部楼层
回复 2# flashercs
感谢大佬,如果想要读取com.h文件中#define VERSION_NUMBER     "S V1.01",字符串S V1.01也当成压缩包名称怎么实现呢?
#define VERSION_NUMBER在.h中的行数不是固定的,VERSION_NUMBER 跟字符串之间的空格可能也会变化,include\com.h 文件路径是相对不变的。

也就是压缩包名称从a  -s "user_rar\DSFC_DSNB_!t!.rar" %files% 变为这样a  -s "user_rar\DSFC_DSNB_S V1.01_!t!.rar" %files%
发表于 2021-11-29 08:54:11 | 显示全部楼层
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. cd /d "%~dp0"
  4. @REM set rar="C:\Program Files\WinRAR\WinRAR.exe"
  5. set rar="rar.exe"
  6. set files="2.txt" "cd.txt" "stdout.txt" "stderr.txt"
  7. set comh="include\com.h"
  8. 2>nul md user_rar
  9. for %%A in (%files%) do (
  10.   set "t=%%~tA"
  11.   set "t=!t:-=!"
  12.   set "t=!t:/=!"
  13.   set "t=!t::=!"
  14.   set "t=!t: =_!"
  15.   goto break
  16. )
  17. :break
  18. for /f "tokens=1,2*" %%A in ('findstr /irc:"#define  *VERSION_NUMBER  *" %comh%') do (
  19.   set vn=%%~C
  20. )
  21. %rar% a "user_rar\DSFC_DSNB_!vn!_!t!.rar" %files%
  22. endlocal
复制代码
回复 9# oyr520
 楼主| 发表于 2021-11-29 14:26:21 | 显示全部楼层
回复 10# flashercs
打包后是这样DSFC_DSNB__20211129_1017.rar,麻烦帮忙看看是什么原因导致的,谢谢!

以下com.h下载链接,如果需要:
https://we.tl/t-QgGy46LeTY
发表于 2021-11-29 16:23:03 | 显示全部楼层
本帖最后由 flashercs 于 2021-11-29 16:25 编辑
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. cd /d "%~dp0"
  4. @REM set rar="C:\Program Files\WinRAR\WinRAR.exe"
  5. set rar="rar.exe"
  6. set files="2.txt" "cd.txt" "stdout.txt" "stderr.txt"
  7. set comh="include\com.h"
  8. 2>nul md user_rar
  9. for %%A in (%files%) do (
  10.   set "t=%%~tA"
  11.   set "t=!t:-=!"
  12.   set "t=!t:/=!"
  13.   set "t=!t::=!"
  14.   set "t=!t: =_!"
  15.   goto break
  16. )
  17. :break
  18. for /f "tokens=1,2*" %%A in ('findstr /irc:"#define  *VERSION_NUMBER" %comh%') do (
  19.   set "vn=%%~C"
  20. )
  21. echo vn=[!vn!]
  22. %rar% a "user_rar\DSFC_DSNB_!vn!_!t!.rar" %files%
  23. endlocal
  24. pause
复制代码
  1. #define VERSION_NUMBER        "21102101"
复制代码
后面不能有空格
c语言代码里 用空格替代tab
 楼主| 发表于 2021-11-29 19:28:30 | 显示全部楼层
回复 12# flashercs
修改后,运行会提示无法打开(如下),然后user_rar文件夹是空的没有生成xxx.rar文件,烦请在帮忙看看,谢谢!

D:\test\user_rar\DSFC_DSNB_21102101.rar: 无法打开 _20211129_1921.rar 2.txt cd.txt stdout.txt stderr.txt
!   系统找不到指定的文件。
发表于 2021-11-29 23:14:20 | 显示全部楼层
回复 13# oyr520


    com.h
  1. /*${.::Com.h} ..............................................................*/

  2. #ifndef Com_h
  3. #define Com_h

  4. //=============macro for function config==============

  5. //=============macro for function config==============

  6. #include "custom_sig.h"
  7. #include "iop_scanner.h"
  8. #include "systemservice.h"
  9. #include "power.h"
  10. #include "user_def.h"
  11. #include "sdk_cfg.h"
  12. #include "user_standby.h"
  13. #include "Display_Srv.h"

  14. #define USERAPP_VOL_MAX (100)
  15. #define USERAPP_VOL_MIN (0)

  16. #define USERAPP_SUB_VOL_MAX (7)//(40)
  17. #define USERAPP_SUB_VOL_MIN (1)

  18. #define CEC_VOL_MAX (100)

  19. //#define DEFAULT_SETTING_APP 0 //usb
  20. #define DEFAULT_SETTING_APP 2 //ARC
  21. //#define DEFAULT_SETTING_APP 4 //aux
  22. #define DEFAULT_SETTING_VOL 34//20
  23. #define DEFAULT_SETTING_EQ eApUserEQ_Mode_FLAT
  24. #define DEFAULT_SETTING_SURROUND eApUserSurround_Mode_OFF
  25. #define DEFAULT_SETTING_DIMMER 2
  26. #define DEFAULT_SETTING_BASS_TRIM 5
  27. #define DEFAULT_SETTING_TREBLE_TRIM 5
  28. #define DEFAULT_SETTING_SURROUND_TRIM 5

  29. //#define AP_DBG
  30. #define ap_printf0(f, a...) LOGX(f, ##a)
  31. #define ap_printf(f, a...) LOGD(f, ##a)
  32. #define ap_printf2(f, a...) LOGDT(f, ##a)
  33. #define ap_printf_E(f, a...) LOGE(f, ##a)
  34. #define printf(f, a...) LOGD(f, ##a)


  35. typedef enum
  36. {
  37.     eUser_TV_UNKNOW = 0,
  38.     eUser_TV_ON,
  39.     eUser_TV_STANDBY,
  40.     eUser_TV_TO_ON,
  41.     eUser_TV_TO_STANDBY
  42. }eUser_TV_Power_t;

  43. typedef enum
  44. {
  45.     UsrHisenseTvSymphonyControl = 0, //TvSymphonyControl   
  46.     UsrHisenseTvSymphonySoundmode = 1, //Soundmode
  47.     UsrHisenseTvSymphonySurroundmode = 2, //Surroundmode
  48.     UsrHisenseTvSymphonyBasslevel = 3, //Dimmer Level
  49.     UsrHisenseTvSymphonyTreblelevel = 4, //Bass Level
  50.     UsrHisenseTvSymphonyDimmer = 5, //Treble Level
  51.     UsrHisenseTvSymphony_max = UsrHisenseTvSymphonyDimmer,
  52. }eUserAppHisenseTvSymphony;

  53. /*${Events::UserAppEvt} ......................................................*/
  54. typedef struct
  55. {
  56.         /* protected: */
  57.         QEvt super;

  58.         /* public: */
  59.         //uint8_t scan;
  60. } UserAppEvt;

  61. typedef struct
  62. {
  63.         QEvt super;
  64.         QActive *pstSender;
  65.         UPGRETURN_T *pUPGRETURN_T;
  66. } UserAppUpgradeEvt;


  67. typedef struct
  68. {
  69.         QEvt super;
  70.         UINT8 User_KeyCode;
  71.         UINT8 User_KeyCodeSrc;
  72.         stKeyInfo_t *pstKeyInfo_t;
  73. } UserAppKeyEvt;



  74. /*${User Key structure} ......................................................*/
  75. typedef struct
  76. {
  77.         UINT8 UserKeyCode;
  78.         UINT8 UserKeyCodeSrc;
  79.         stKeyInfo_t stKeyInfo;
  80. } stUserKeyInfo_t;

  81. typedef struct
  82. {
  83.         int  switch_src_time;
  84.         int  power_off_time;
  85.         int  power_on_time;
  86.         int  burn_log_enable;
  87. } AutoSrcTest_t;


  88. typedef struct
  89. {
  90.         int  private_signal_number;
  91.         int  private_signal_repeat_time;
  92. } AutoRepeatSignalTest_t;

  93. enum mutestate
  94. {
  95.         eMute_off = 0,
  96.         eMute_on,

  97. };

  98. typedef enum
  99. {
  100.         BT_CONNECT_READY,
  101.         BT_CONNECT_SUCCESS,
  102. } BtHintType_e;

  103. typedef enum
  104. {
  105.         VA_OFF = 0,
  106.         VA_ON,
  107. } eVAStatus_t;

  108. enum channel_src //vic channel detect 0414
  109. {
  110.     channel_RL = 0,
  111.     channel_RL_Sub,
  112.     channel_RL_RLs,
  113.     channel_RL_RLs_Sub,
  114.     channel_default

  115. };

  116. enum surround_sync //vic channel detect 0414
  117. {
  118.     surr_L = 0,
  119.         surr_R,
  120.         surr_LR,
  121.         surr_default

  122. };

  123. /*${AOs::UserApp_ctor} .......................................................*/
  124. void UserApp_ctor(void);
  125. int SendDataBySerial(UINT8 *data ,UINT8 cmd,UINT16 datalength);
  126. int Userapp_Get_System_Memory_Source(void);



  127. /*${AOs::MediaScanner_ctor} .......................................................*/
  128. //void IopScanner_ctor(void);


  129. QActive *UserApp_get(void);

  130. //===== daniel For Trace=====
  131. int UserApp_GetEQStatus(void);
  132. int UserApp_GetSoundModeStatus(void);


  133. /******************************************************************Customer define in here*********************************************************/
  134. #define CUSTOMER_SUN_SP10                0
  135. #define CUSTOMER_SUN_SP30                1
  136. #define CUSTOMER_ZY_SP10                2


  137. #define CUSTOMER_BOARD_TYPE CUSTOMER_ZY_SP10

  138. #define MODEL0 "Demo"
  139. #define MODEL1 "Pre-ES"
  140. #define MODEL2 "ES"
  141. #define MODEL3 "EVT"
  142. #define MODEL4 "DVT"
  143. #define MODEL5 "PVT"
  144. #define MODEL6 "MP"

  145. /********************************SUN SP10****************************************/
  146. #if (CUSTOMER_BOARD_TYPE == CUSTOMER_SUNP_SP10)
  147. #define MODE_NAME "Demo Sun_SP10"
  148. #define MODEL MODEL0
  149. #define VERSION_NUMBER        "21102101"

  150. /********************************SUN SP30****************************************/
  151. #elif (CUSTOMER_BOARD_TYPE == CUSTOMER_SUN_SP30)
  152. #define MODE_NAME "Demo Sun_SP30"
  153. #define MODEL MODEL0
  154. #define VERSION_NUMBER        "21102101"

  155. //=============GPIO pin function config ==============
  156. #define POWERON_GPIO_PIN (33)
  157. #define POWERON_3V3_GPIO_PIN (31) //gpio31不能使用
  158. #define EXT_BT_RESET_GPIO_PIN (51)
  159. #define POWERON_HDMI_1V3_GPIO_PIN (42)
  160. #define POWERON_WIRELESS_3V3_GPIO_PIN (43)

  161. /********************************SUN SP30****************************************/
  162. #elif (CUSTOMER_BOARD_TYPE == CUSTOMER_ZY_SP10)
  163. #define MODE_NAME "ZY_SP10"
  164. #define MODEL MODEL0
  165. #define VERSION_NUMBER        "S V1.01"
  166. #define SDKVERSION "v1.3"

  167. //#define SUPPORT_XEFFECT
  168. #define SUPPORT_EXT_RF //RF_IA9QH5

  169. #ifdef SUPPORT_EXT_RF
  170. #define SYNC_UPGRADE
  171. //#define SUPPORT_TXRX_VER_CHECK
  172. #endif

  173. #define EXT_MCU_IF_CUSTOMER // for extern mcu solution use
  174. #define EXT_BT_UART
  175. #define SUPPORT_UART_MASTER  //uart master mode       

  176. #ifdef SUPPORT_UART_MASTER
  177. #define SUPPORT_UART_RINGBUFFER
  178. #endif

  179. #define UART_HY_PROTOCOL 0
  180. #define UART_POLK_DISH_PROTOCOL 1
  181.        
  182. #define UART_PROTOCOL_TYPE UART_POLK_DISH_PROTOCOL

  183. //=============GPIO pin function config ==============
  184. #define POWERON_GPIO_PIN (44)
  185. #define POWERON_3V3_GPIO_PIN (31) //gpio31不能使用
  186. #define USB_VBUS_GPIO_PIN (21)
  187. #define EXT_BT_RESET_GPIO_PIN (51)
  188. #define EXT_BT_ENABLE_GPIO_PIN (54) //unused
  189. #define POWERON_HDMI_1V3_GPIO_PIN (42) //unused
  190. #define POWERON_WIRELESS_3V3_GPIO_PIN (43) //unused
  191. #define POWERON_LED_GPIO_PIN (14)
  192. #define DEBUG_CTL_GPIO  (34)

  193. #else
  194. #define NAME "HY_MAIN/SP30N"
  195. #define MODEL MODEL0
  196. #define VERSION_NUMBER        "21102101"
  197. #endif

  198. #endif /* UserApp_h */
复制代码
 楼主| 发表于 2021-11-30 00:42:03 | 显示全部楼层
回复 14# flashercs
我明白前面说的意思了 “后面不能有空格
c语言代码里 用空格替代tab”
验证可以了,谢谢大佬
我发现com.h里面有多个#define VERSION_NUMBER        "21102101",只会识别最后一个,但想识别的是下面这个,不知道能实现嘛
#elif (CUSTOMER_BOARD_TYPE == CUSTOMER_ZY_SP10)
#define MODE_NAME "ZY_SP10"
#define MODEL MODEL0
#define VERSION_NUMBER        "S V1.01" //想识别到这个

因为前面宏定义的是
#define CUSTOMER_SUN_SP10                0
#define CUSTOMER_SUN_SP30                1
#define CUSTOMER_ZY_SP10                2 //选的是这个


#define CUSTOMER_BOARD_TYPE CUSTOMER_ZY_SP10 //宏定义有效的是这个#define CUSTOMER_ZY_SP10                2
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 19:14 , Processed in 0.024412 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表