[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理自动修改文件内容求助

本帖最后由 waiman 于 2013-2-7 17:45 编辑

批处理自动修改文件内容求助:

目前已有三个文件.
文件1, 00000000-0000-0000-0000-000000000000.goldItem
文件内容:

<?xml version="1.0" encoding="utf-8"?>
2088-01-01T03:15
Nugget 11.111 Grams
gold-000000
00000000-0000-0000-0000-000000000000
<StartTime>2088-01-01T03:15
<Title>Nugget 11.111 Grams</Title>
<SKU>gold-000000</SKU>
<Guid>00000000-0000-0000-0000-000000000000</Guid>


文件2, goldItem.bat
文件内容:

@echo off
for %%i IN (0000511,0000512,0000513) do (if not exist gold-%%i md gold-%%i
EMake.bat gold-000000 gold-%%i 00000000-0000-0000-0000-000000000000.goldItem> gold-%%i\00000000-0000-0000-0000-000000%%i.goldItem)


文件3, EMake.bat
文件内容:

@echo off
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
set "line=%%B"
if defined line (
call set "line=echo.%%line:%~1=%~2%%"
for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
) ELSE echo.
)


当我运行goldItem.bat时, 会自动创立文件夹gold-0000511, gold-0000512, gold-0000513, 及文件夹内创立三个文件, 文件A是00000000-0000-0000-0000-0000000000511.goldItem, 文件B是00000000-0000-0000-0000-0000000000512.goldItem, 文件C是00000000-0000-0000-0000-0000000000513.goldItem, 这三个文件是从00000000-0000-0000-0000-000000000000.goldItem复制及修已成功改了当中的所有gold-000000.

现在我求助的是, 需要保留上面的一切之外, 再增加自动修改00000000-0000-0000-0000-000000000000, 和2088-01-01T03:15, 及Nugget 11.111 Grams这三项内容.

希望假如如我在goldItem.bat内某处输入数值 (0000511,0000512,0000513) (2013-02-15T03:15, 2013-02-15T03:16, 2013-02-15T03:17) (3.460, .268, .107), 然后:

文件A内, 00000000-0000-0000-0000-000000000000自动改成00000000-0000-0000-0000-0000000000511.
文件B内, 00000000-0000-0000-0000-000000000000自动改成00000000-0000-0000-0000-0000000000512.
文件C内, 00000000-0000-0000-0000-000000000000自动改成00000000-0000-0000-0000-0000000000513.

文件A内, 2088-01-01T03:15自动改成2013-02-15T03:15
文件B内, 2088-01-01T03:15自动改成2013-02-15T03:16
文件C内, 2088-01-01T03:15自动改成2013-02-15T03:17

文件A内, Nugget 11.111 Grams自动改成Nugget 3.460 Grams
文件B内, Nugget 11.111 Grams自动改成Nugget .268 Grams
文件C内, Nugget 11.111 Grams自动改成Nugget .107 Grams

谢谢你的帮助.

又发觉原来文件名及内容不能用00000000-0000-0000-0000-000000000000, 而必需用Guid例如40A96541-1110- ...
waiman 发表于 2013-2-11 02:53


我已成功弄好了Guid了. Thank you.

TOP

本帖最后由 waiman 于 2013-2-11 03:22 编辑
goldItem.batEMake.bat
apang 发表于 2013-2-8 19:17


又发觉原来文件名及内容不能用00000000-0000-0000-0000-000000000000, 而必需用Guid例如40A96541-1110-44B5-9E29-397D81B2D8AC.

请问是否能改为自动改成Guid? 谢谢.

祝各位新年快乐, 万事如意.

TOP

另存为ansi编码格式即可。或者:
ConCmd.exe命令行工具:
vbs版文件编码识别、转换:
apang 发表于 2013-2-9 08:49


Ok. 谢谢.

TOP

另存为ansi编码格式即可。或者:
ConCmd.exe命令行工具: http://bathome.l3.wuyou.com/thread-12595-1-1.html
vbs版文件编码识别、转换:http://bbs.bathome.net/thread-3900-1-1.html

TOP

goldItem.batEMake.bat
apang 发表于 2013-2-8 19:17


发觉由于文件00000000-0000-0000-0000-000000000000.goldItem是UTF-8 Unicode Signature (BOM)格式,
所以<?xml version="1.0" encoding="utf-8"?>会变成:

嚜??xml version="1.0" encoding="utf-8"?>

请问有否办法解决呢?

TOP

goldItem.batEMake.bat
apang 发表于 2013-2-8 19:17


太感谢了, 这正是我需要的, 再次谢谢你的帮忙.

TOP

goldItem.bat
  1. @echo off
  2. set "Name=00000000-0000-0000-0000-000000000000.goldItem"
  3. set "a=0000511/2013-02-15T03:15/3.460"
  4. set "b=0000512/2013-02-15T03:16/.268"
  5. set "c=0000513/2013-02-15T03:17/.107"
  6. for %%i IN ("%a%","%b%","%c%") do (
  7.   for /f "tokens=1-3 delims=/" %%a in (%%i) do (
  8.     md "gold-%%a" 2>nul
  9.     EMake.bat %%a %%b %%c>"gold-%%a\00000000-0000-0000-0000-000000%%a.goldItem"
  10.   )
  11. )
复制代码
EMake.bat
  1. @echo off
  2. if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
  3. for /f "tokens=1* delims=]" %%A in ('find /n /v ""^<"%Name%"') do (
  4.   set "line=$%%B"
  5.   setlocal enabledelayedexpansion
  6.   set "line=!line:gold-000000=gold-%1!"
  7.   set "line=!line:2088-01-01T03:15=%2!"
  8.   set "line=!line:Nugget 11.111 Grams=Nugget %3 Grams!"
  9.   set "line=!line:000000000000=000000%1!"
  10.   echo,!line:~1!
  11.   endlocal
  12. )
复制代码

TOP

返回列表