批处理练手(2015-7-1 update)

从今天开始,我会把解题思路写下来,防止遗忘,方便随后复习。

1,多行文本合并为一行

问题场景:

跑出来的goagent IP是 ip + 域名的形式,格式不对,无法直接添加到proxy.ini的iplist,写了个批处理,一键把不规则的goagent IP修改为proxy.ini能读取的IP。

解题思路:

1,第一个for命令,以默认的空格为节点,默认提取第一个字段的ip地址,到处到ip.txt。注意,这里用到了一个转移字符^

2,第二个for命令中,借助set命令,把读取的ip.txt中的ip地址赋予变量x,然后把变量x写入到tmp.txt中。

代码:

@echo off &setlocal enabledelayedexpansion
del tmp.txt ip.txt >nul 2>nul
for /f %%i in (ip_tmpok.txt) do echo %%i^| >> ip.txt
for /f %%j in (ip.txt) do (
(set /p x=%%j<nul ) >>tmp.txt
)
del ip.txt >nul 2>nul

截图:

批处理练手(2015-7-1 update)_第1张图片


2,紧邻的两行合并

问题场景:

导入的QQ聊天记录,时间和对话不再同一行,看着很不方便,希望把时间和对话放在同一行。

解题思路:

1,利用求模的方法来判断奇偶行 m=n%%2

2,利用set命令,奇偶行合并输出

代码:

@echo off&setlocal enabledelayedexpansion
(for /f "delims=" %%a in (1.txt) do (
  if defined a echo,!a! %%a
  Rem 若定义了变量a,显示变量a及%%a的值
  set/a n+=1,m=n%%2
  Rem 变量n每循环一次自加1,变量m是求n的模(也就是奇偶判断)
  if "!m!"=="0" (set a=) else set "a=%%a"
  Rem 如若偶数行,将变量a赋空值;奇数行,将%%a的值赋给变量a
))>2.txt

批处理练手(2015-7-1 update)_第2张图片

3,在文本前面插入内容

@echo off
if "%1" == "" (
echo 命令用法:%0 filename
echo 		filename表示要插入内容的文件。
echo.
echo 未指定要插入内容的文件,无法执行插入操作。
echo.
goto end
)

if not exist %1 (
echo.
echo 指定要插入内容的文件不存在
echo.
goto end
)

echo 正在进行插入操作……
echo.
cd.>content.temp
echo %date%>>content.temp
echo %time%>>content.temp
copy content.temp + %1 temp > nul
del /f /q %1 >nul
del /f /q content.temp > nul
ren temp %1
echo 成功在%1文件前面插入当前的日期和时间。
:end
exit

主要利用copy命令的合并文本功能

你可能感兴趣的:(批处理练手(2015-7-1 update))