系统相关 Windows 脚本

去除文件夹名中的前缀

去除文件夹名字的【价值千万XXX】前缀

@Echo Off&SetLocal ENABLEDELAYEDEXPANSION
FOR /f "tokens=*" %%i in ('dir /a:d /b') do (
  set "name=%%i"
  set "name=!name:【价值千万XXX】=!"
  ren "%%i" "!name!"
)
exit

去除文件名中的前缀

去除文件名【价值千万XXX】前缀

@Echo Off&SetLocal ENABLEDELAYEDEXPANSION
FOR %%a in (*) do (
  set "name=%%a"
  set "name=!name:【价值千万XXX】=!"
  ren "%%a" "!name!"
)
exit

去除文件名中的左右括号

@Echo Off&SetLocal ENABLEDELAYEDEXPANSION
FOR %%a in (*) do (
  set "name=%%a"
  set "name=!name:(=!"
  set "name=!name:)=!"
  ren "%%a" "!name!"
)
exit

批处理命令详解

@Echo Off&SetLocal ENABLEDELAYEDEXPANSION
::关闭回显,设置变量延迟
FOR %%a in (*) do (
::获取文件名
    set "name=%%a"
    ::把获取到的文件名赋值给 变量 name
    set "name=!name: (=!"
    ::使用 SET 命令的变量替换功能 把name中的 ( 替换为空,即 !name: (=!"
    set "name=!name:)=!"
    ::同上一条命令类似
    ren "%%a" "!name!"
    ::把 刚才获取到的文件名修改为 set 命令替换后的文件名.
)
EXIT
::主要是使用 set 命令的变量替换功能. 修改一下就很好理解了:
set "name=!name: (=左括号!"
set "name=!name:)=右括号!"

注意事项

其中,感叹号其实就是变量百分号(%)的强化版。
之所以要用!而不用%,是因为在for循环中,当一个变量被多次赋值时,
%dd%所获取的仅仅是dd第一次被赋予的值;
要想刷新dd的值,
就必须首先通过命令"setlocal enabledelayedexpansion"来开启延迟变量开关,
然后用!dd!来获取dd的值。

http://ttwang.iteye.com/blog/2017672
@echo off
关闭回显
@echo on
打开回显


如果字符串中有&符号,可以使用 set c="abc&def" ,但是引号会带入变量,如果不想引号被带入变量就要使用 set "c=abc^&def"。

set "c=abc&def" ---- 错误
set c=abc&def   ---- 错误
set c=abc^&def  ---- 错误

set c="abc&def" ---- 输出结果:"abc&def"
set "c=abc^&def" --- 输出结果:abc&def

合并多个ts文件

@echo off
:: 开启延迟变量
setlocal EnableDelayedExpansion

:: 最终生成的文件名称(使用注意1)
set generate_file=amos.ts

:: =======================
:: == 生成的文件默认在当前文件夹下 ==
:: =======================
:: 最终生成的文件全路径
:: %~dp0 表示当前文件夹
set generate_file_full_path=%~dp0%generate_file%

:: 要合并文件数量(/a 表示数字)
set /a merge_count=0
:: 要合并的文件的前缀(使用注意2)
set old_file_prefix=a
:: 要合并的文件的后缀(使用注意3)
set old_file_suffix=.ts

:: 文件已存在就删除
if exist %generate_file% del /f /q %generate_file%

:: 遍历符合格式的文件
for /r %%i in (*.ts) do (
    set /a merge_count += 1
)

:: 初始化空文件
cd > %generate_file%
echo 开始合并文件······

:: for 循环遍历所有文件
for /l %%i in (1, 1, %merge_count%) do (
    set "temp_file_path=%~dp0%old_file_prefix%%%i%old_file_suffix%"
    :: 拼接文件 copy generate_file + 当前遍历的file generate_file
    copy /b %generate_file_full_path% + !temp_file_path! %generate_file_full_path%
    if "%%i" neq "%~f0" echo =========================
)

:: 结束语
echo 合并文件完成!
pause