Batch para renombrar archivos xml de acuerdo a su contenido..
Soy nuevo en este tema de la programación en cmd, por lo que los molesto con un tema que tengo varios días sin resolver, se trata de renombrar varios archivos xml de acuerdo a su contendió, específicamente el contenido de la etiqueta "Niv=" la cual contiene un numero de serie con el cual se debe renombrar cada archivo.
He intentado con este código pero no puedo hacer que funcione, cualquier apoyo se agradece.
@ECHO OFF SETLOCAL EnableExtensions DisableDelayedExpansion pushd "C:\Users\Javier Preciado\Desktop\sistemas\" REM Get a static list of `xml` files for /f "delims=" %%Z in ('dir /b *.xml') do ( set "_Niv=" REM clear a sentinel flag REM Search for a particular text string in a file for /f "delims=" %%A in ( 'find /i "Niv=" ^< "%%Z"' ) do ( REM The FOR command is mostly used to process a set of one or more files, REM but you can also process a set of one or more text strings: for %%G in ( %%A ) do ( REM debugging output echo debug %%G REM found the particular text string in the line? If /I "%%~G"=="Niv" ( set "_Niv=Niv" REM set the sentinel flag ) else ( if defined _Niv ( REM debugging output echo found Niv in file "%%~Z": "%%~G" REM check as to whether a file isn't renamed already if EXIST "%%~Z" if /I "%%~Z" NEQ "%%~G.xml" ( REM remove ECHO from next line no sooner than debugged ren "%%~Z" "%%~G.xml" ) ) set "_Niv=" REM clear the sentinel flag ) ) ) ) REM Change directory back to the path/folder most recently stored by the PUSHD command. Popd
1 Respuesta
El bat que propones es bastante complejo pero antes de ponerme a "estudiarlo" he recordado que ya te ayudé con un problema muy parecido en Batch para modificar múltiples archivos xml basándose en su contenido especifico.
¿No puedes adaptar el bat de entonces a este caso? ¿Hay algo que lo impida?
Ya he revisado y probado tu código. Según el texto de tus propios comentarios la línea
Ren "%%~Z" "%%~G.xml"
debería ser (al menos durante la fase de depuración):
Echo ren "%%~Z" "%%~G.xml"
Pero aparte de eso aparentemente funciona, al menos con mis archivos xml de prueba. Dime que es lo que te falla aportando un ejemplo e intentaré averiguar la causa.
Gracias por responder mi estimado, y si recuerdo que ya me apoyaste en una ocasión por lo cual también te agradezco. Mira creo que el problema es porque el nuevo archivo es muy largo y no alcanza a leerlo el código que adjunte. Anexo el contenido del archivo.
<?xml version="1.0" encoding="UTF-8" ?><cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ventavehiculos="http://www.sat.gob.mx/ventavehiculos" xmlns:terceros="http://www.sat.gob.mx/terceros" xmlns:Toyota="http://www.pegasotecnologia.com/secfd/Schemas" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd http://www.sat.gob.mx/ventavehiculos http://www.sat.gob.mx/sitio_internet/cfd/ventavehiculos/ventavehiculos11.xsd http://www.sat.gob.mx/terceros http://www.sat.gob.mx/sitio_internet/cfd/terceros/terceros11.xsd http://www.pegasotecnologia.com/secfd/Schemas http://www.pegasotecnologia.com/secfd/Schemas/AddendaEmisorToyota.xsd" Version="3.3" Serie="A" Folio="000814547" Fecha="2017-12-01T15:27:55" Moneda="MXN" TipoCambio="1" SubTotal="292556.52" Total="338928.57" FormaPago="99" CondicionesDePago="Inmediato" TipoDeComprobante="I" MetodoPago="PPD" LugarExpedicion="45110" NoCertificado="00001000000402850319" Certificado="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" Sello="LV1beEcSeRBLjmIrZV6wwQ5TcYQkYeuekAKtAmgRsGD5EezvevH4gv3+93E8Wk9CxBJNVRYLHLlG3uxR7rXawpBTbgPJFCPSt3a0q+Rb3OnBdu8BAdu/lNi4lGojrgzcbthZnPD0u9WoJOiDFI4494wUDR4dF2WJr+8QYYxSfXtMQV065dOrDDtmfJektPIS0hq1JAkknHpThExjX8s0UuV2+MVTciu+DVXoa4G5wp0ldLCWLSzsR5iXulATCEgodrynw5/kvLKqZkI2GAy5oCO2GA0REHFosIlISuNBhD08fcEOwju+NVHKGdjXZ89YpkCXMVxhrL0CQVHZ1dxuNQ=="><cfdi:Emisor Rfc="TMS010508RX0" Nombre="TOYOTA MOTOR SALES DE MEXICO S DE RL DE CV" RegimenFiscal="601" /><cfdi:Receptor Rfc="OAU021125H84" Nombre="OZ AUTOMOTRIZ S DE RL DE CV" UsoCFDI="P01" /><cfdi:Conceptos><cfdi:Concepto ClaveProdServ="25101500" NoIdentificacion="56012018" Cantidad="1.00" ClaveUnidad="EA" Unidad="EA" Descripcion="Hiace Panel Van Super Long" ValorUnitario="283717.25" Importe="283717.25"><cfdi:Impuestos><cfdi:Traslados><cfdi:Traslado Base="283717.25" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="45394.76" /></cfdi:Traslados></cfdi:Impuestos><cfdi:InformacionAduanera NumeroPedimento="17 51 3788 7004005" /><cfdi:ComplementoConcepto><ventavehiculos:VentaVehiculos version="1.1" ClaveVehicular="1520202" Niv="JTFPX22PXJ0080089"><ventavehiculos:InformacionAduanera numero="1701842" fecha="2017-11-28" aduana="Lazaro Cardenas" /></ventavehiculos:VentaVehiculos></cfdi:ComplementoConcepto></cfdi:Concepto><cfdi:Concepto ClaveProdServ="01010101" NoIdentificacion="560120181" Cantidad="1.00" ClaveUnidad="EA" Unidad="EA" Descripcion="Manejo, procesamiento y entreg" ValorUnitario="6108.07" Importe="6108.07"><cfdi:Impuestos><cfdi:Traslados><cfdi:Traslado Base="6108.07" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="977.29" /></cfdi:Traslados></cfdi:Impuestos></cfdi:Concepto><cfdi:Concepto ClaveProdServ="01010101" NoIdentificacion="5601201823" Cantidad="1.00" ClaveUnidad="EA" Unidad="EA" Descripcion="Otros cargos DTM" ValorUnitario="2320.00" Importe="2320.00"><cfdi:Impuestos><cfdi:Traslados><cfdi:Traslado Base="2320.00" Impuesto="002" TipoFactor="Exento" /></cfdi:Traslados></cfdi:Impuestos><cfdi:ComplementoConcepto><terceros:PorCuentadeTerceros version="1.1" rfc="DTM020315Q47" nombre="Distribuidores Toyota México, A.C."><terceros:Impuestos><terceros:Traslados><terceros:Traslado impuesto="IVA" tasa="0" importe="0.00" /></terceros:Traslados></terceros:Impuestos></terceros:PorCuentadeTerceros></cfdi:ComplementoConcepto></cfdi:Concepto><cfdi:Concepto ClaveProdServ="01010101" NoIdentificacion="5601201824" Cantidad="1.00" ClaveUnidad="EA" Unidad="EA" Descripcion="Otros cargos DTM" ValorUnitario="371.20" Importe="371.20"><cfdi:Impuestos><cfdi:Traslados><cfdi:Traslado Base="371.20" Impuesto="002" TipoFactor="Exento" /></cfdi:Traslados></cfdi:Impuestos><cfdi:ComplementoConcepto><terceros:PorCuentadeTerceros version="1.1" rfc="DCO050303BG1" nombre="DTMAC Comercializadora, S.A. de C.V."><terceros:Impuestos><terceros:Traslados><terceros:Traslado impuesto="IVA" tasa="0" importe="0.00" /></terceros:Traslados></terceros:Impuestos></terceros:PorCuentadeTerceros></cfdi:ComplementoConcepto></cfdi:Concepto><cfdi:Concepto ClaveProdServ="01010101" NoIdentificacion="5601201825" Cantidad="1.00" ClaveUnidad="EA" Unidad="EA" Descripcion="Otros cargos DTM" ValorUnitario="40.00" Importe="40.00"><cfdi:Impuestos><cfdi:Traslados><cfdi:Traslado Base="40.00" Impuesto="002" TipoFactor="Exento" /></cfdi:Traslados></cfdi:Impuestos><cfdi:ComplementoConcepto><terceros:PorCuentadeTerceros version="1.1" rfc="FME930525J6A" nombre="Fundacion Merced, A.C."><terceros:Impuestos><terceros:Traslados><terceros:Traslado impuesto="IVA" tasa="0" importe="0.00" /></terceros:Traslados></terceros:Impuestos></terceros:PorCuentadeTerceros></cfdi:ComplementoConcepto></cfdi:Concepto></cfdi:Conceptos><cfdi:Impuestos TotalImpuestosTrasladados="46372.05"><cfdi:Traslados><cfdi:Traslado Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="46372.05" /></cfdi:Traslados></cfdi:Impuestos><cfdi:Complemento><tfd:TimbreFiscalDigital xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet/cfd/timbrefiscaldigital/TimbreFiscalDigitalv11.xsd" Version="1.1" UUID="E3A64D3C-1F89-4620-B005-A021B109FB23" FechaTimbrado="2017-12-01T15:27:55" RfcProvCertif="SST060807KU0" SelloCFD="LV1beEcSeRBLjmIrZV6wwQ5TcYQkYeuekAKtAmgRsGD5EezvevH4gv3+93E8Wk9CxBJNVRYLHLlG3uxR7rXawpBTbgPJFCPSt3a0q+Rb3OnBdu8BAdu/lNi4lGojrgzcbthZnPD0u9WoJOiDFI4494wUDR4dF2WJr+8QYYxSfXtMQV065dOrDDtmfJektPIS0hq1JAkknHpThExjX8s0UuV2+MVTciu+DVXoa4G5wp0ldLCWLSzsR5iXulATCEgodrynw5/kvLKqZkI2GAy5oCO2GA0REHFosIlISuNBhD08fcEOwju+NVHKGdjXZ89YpkCXMVxhrL0CQVHZ1dxuNQ==" NoCertificadoSAT="00001000000405179095" SelloSAT="DsTXSzE+CTI+c6cobTFhLee2nsQVC+l0Fnjy2+5OTGTUpTWUj7FjpSw/tgHsiSNijTVKuiGuQFanSj2AmZImM6PXaPe06cEpt11PQ6ABOzR2PZpJ0Eanf3/YwpOu4/fyH3euZS/dtLIfZpFOrwAZlhJ7zQCLS7cv2q5dnLRRz9o1PD0yTv/7ECm3mPE30eWXKjsmg46HckzY+mxDWFWmpmhfQGR/PhimThQBq03+WO78ycresk67q5jM1rvmGzNPnh9UIKAEAH4NSsdrCt0jgkff2vOeYCVmsuhBf/y4L9FXid/vAdGS7xMgaBMEP9e1AnEBW1IppbUCaKMZe2jX4g==" /></cfdi:Complemento><cfdi:Addenda><Toyota:AddendaEmisor><Toyota:Toyota><Toyota:Datos email="[email protected]" distFd="57011" fechaEmbarque="2017-11-28" facturaTms="1701842" claveVehicular="1520202" color="058 ICEBERG / FR13 FR13" usado="usado" numMotor="2TR -9145818" otrosCargos="6108.07" netoPagar="338928.57" /></Toyota:Toyota></Toyota:AddendaEmisor></cfdi:Addenda></cfdi:Comprobante>
Efectivamente, el problema es del archivo. No por su tamaño, sino porque contiene una sola línea de más de 4096 caracteres (en este caso es de 8687). Hasta donde yo sé (lo averigüé con ocasión de la consulta Como usar el comando Diskpart ) los comandos de la shell estándar de Windows (MSDOS/CMD/Símbolo del sistema o como queramos llamarla) no tratan líneas de más de 4096 caracteres. Tal como se dice en esa consulta la alternativa es usar la otra shell de Windows, Powershell. Puedes comprobar que si partes esa única fila insertando un cambio de línea tras el carácter 4006 (tal como he hecho yo en el snippet "anexo") el bat lo trata correctamente:
<?xml version="1.0" encoding="UTF-8" ?><cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ventavehiculos="http://www.sat.gob.mx/ventavehiculos" xmlns:terceros="http://www.sat.gob.mx/terceros" xmlns:Toyota="http://www.pegasotecnologia.com/secfd/Schemas" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd http://www.sat.gob.mx/ventavehiculos http://www.sat.gob.mx/sitio_internet/cfd/ventavehiculos/ventavehiculos11.xsd http://www.sat.gob.mx/terceros http://www.sat.gob.mx/sitio_internet/cfd/terceros/terceros11.xsd http://www.pegasotecnologia.com/secfd/Schemas http://www.pegasotecnologia.com/secfd/Schemas/AddendaEmisorToyota.xsd" Version="3.3" Serie="A" Folio="000814547" Fecha="2017-12-01T15:27:55" Moneda="MXN" TipoCambio="1" SubTotal="292556.52" Total="338928.57" FormaPago="99" CondicionesDePago="Inmediato" TipoDeComprobante="I" MetodoPago="PPD" LugarExpedicion="45110" NoCertificado="00001000000402850319" Certificado="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" Sello="LV1beEcSeRBLjmIrZV6wwQ5TcYQkYeuekAKtAmgRsGD5EezvevH4gv3+93E8Wk9CxBJNVRYLHLlG3uxR7rXawpBTbgPJFCPSt3a0q+Rb3OnBdu8BAdu/lNi4lGojrgzcbthZnPD0u9WoJOiDFI4494wUDR4dF2WJr+8QYYxSfXtMQV065dOrDDtmfJektPIS0hq1JAkknHpThExjX8s0UuV2+MVTciu+DVXoa4G5wp0ldLCWLSzsR5iXulATCEgodrynw5/kvLKqZkI2GAy5oCO2GA0REHFosIlISuNBhD08fcEOwju+NVHKGdjXZ89YpkCXMVxhrL0CQVHZ1dxuNQ=="><cfdi:Emisor Rfc="TMS010508RX0" Nombre="TOYOTA MOTOR SALES DE MEXICO S DE RL DE CV" RegimenFiscal="601" /><cfdi:Receptor Rfc="OAU021125H84" Nombre="OZ AUTOMOTRIZ S DE RL DE CV" UsoCFDI="P01" /><cfdi:Conceptos><cfdi:Concepto ClaveProdServ="25101500" NoIdentificacion="56012018" Cantidad="1.00" ClaveUnidad="EA" Unidad="EA" Descripcion="Hiace Panel Van Super Long" ValorUnitario="283717.25" Importe="283717.25"><cfdi:Impuestos><cfdi:Traslados> <cfdi:Traslado Base="283717.25" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="45394.76" /></cfdi:Traslados></cfdi:Impuestos><cfdi:InformacionAduanera NumeroPedimento="17 51 3788 7004005" /><cfdi:ComplementoConcepto><ventavehiculos:VentaVehiculos version="1.1" ClaveVehicular="1520202" Niv="JTFPX22PXJ0080089"><ventavehiculos:InformacionAduanera numero="1701842" fecha="2017-11-28" aduana="Lazaro Cardenas" /></ventavehiculos:VentaVehiculos></cfdi:ComplementoConcepto></cfdi:Concepto><cfdi:Concepto ClaveProdServ="01010101" NoIdentificacion="560120181" Cantidad="1.00" ClaveUnidad="EA" Unidad="EA" Descripcion="Manejo, procesamiento y entreg" ValorUnitario="6108.07" Importe="6108.07"><cfdi:Impuestos><cfdi:Traslados><cfdi:Traslado Base="6108.07" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="977.29" /></cfdi:Traslados></cfdi:Impuestos></cfdi:Concepto><cfdi:Concepto ClaveProdServ="01010101" NoIdentificacion="5601201823" Cantidad="1.00" ClaveUnidad="EA" Unidad="EA" Descripcion="Otros cargos DTM" ValorUnitario="2320.00" Importe="2320.00"><cfdi:Impuestos><cfdi:Traslados><cfdi:Traslado Base="2320.00" Impuesto="002" TipoFactor="Exento" /></cfdi:Traslados></cfdi:Impuestos><cfdi:ComplementoConcepto><terceros:PorCuentadeTerceros version="1.1" rfc="DTM020315Q47" nombre="Distribuidores Toyota México, A.C."><terceros:Impuestos><terceros:Traslados><terceros:Traslado impuesto="IVA" tasa="0" importe="0.00" /></terceros:Traslados></terceros:Impuestos></terceros:PorCuentadeTerceros></cfdi:ComplementoConcepto></cfdi:Concepto><cfdi:Concepto ClaveProdServ="01010101" NoIdentificacion="5601201824" Cantidad="1.00" ClaveUnidad="EA" Unidad="EA" Descripcion="Otros cargos DTM" ValorUnitario="371.20" Importe="371.20"><cfdi:Impuestos><cfdi:Traslados><cfdi:Traslado Base="371.20" Impuesto="002" TipoFactor="Exento" /></cfdi:Traslados></cfdi:Impuestos><cfdi:ComplementoConcepto><terceros:PorCuentadeTerceros version="1.1" rfc="DCO050303BG1" nombre="DTMAC Comercializadora, S.A. de C.V."><terceros:Impuestos><terceros:Traslados><terceros:Traslado impuesto="IVA" tasa="0" importe="0.00" /></terceros:Traslados></terceros:Impuestos></terceros:PorCuentadeTerceros></cfdi:ComplementoConcepto></cfdi:Concepto><cfdi:Concepto ClaveProdServ="01010101" NoIdentificacion="5601201825" Cantidad="1.00" ClaveUnidad="EA" Unidad="EA" Descripcion="Otros cargos DTM" ValorUnitario="40.00" Importe="40.00"><cfdi:Impuestos><cfdi:Traslados><cfdi:Traslado Base="40.00" Impuesto="002" TipoFactor="Exento" /></cfdi:Traslados></cfdi:Impuestos><cfdi:ComplementoConcepto><terceros:PorCuentadeTerceros version="1.1" rfc="FME930525J6A" nombre="Fundacion Merced, A.C."><terceros:Impuestos><terceros:Traslados><terceros:Traslado impuesto="IVA" tasa="0" importe="0.00" /></terceros:Traslados></terceros:Impuestos></terceros:PorCuentadeTerceros></cfdi:ComplementoConcepto></cfdi:Concepto></cfdi:Conceptos><cfdi:Impuestos TotalImpuestosTrasladados="46372.05"><cfdi:Traslados><cfdi:Traslado Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="46372.05" /></cfdi:Traslados></cfdi:Impuestos><cfdi:Complemento><tfd:TimbreFiscalDigital xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet/cfd/timbrefiscaldigital/TimbreFiscalDigitalv11.xsd" Version="1.1" UUID="E3A64D3C-1F89-4620-B005-A021B109FB23" FechaTimbrado="2017-12-01T15:27:55" RfcProvCertif="SST060807KU0" SelloCFD="LV1beEcSeRBLjmIrZV6wwQ5TcYQkYeuekAKtAmgRsGD5EezvevH4gv3+93E8Wk9CxBJNVRYLHLlG3uxR7rXawpBTbgPJFCPSt3a0q+Rb3OnBdu8BAdu/lNi4lGojrgzcbthZnPD0u9WoJOiDFI4494wUDR4dF2WJr+8QYYxSfXtMQV065dOrDDtmfJektPIS0hq1JAkknHpThExjX8s0UuV2+MVTciu+DVXoa4G5wp0ldLCWLSzsR5iXulATCEgodrynw5/kvLKqZkI2GAy5oCO2GA0REHFosIlISuNBhD08fcEOwju+NVHKGdjXZ89YpkCXMVxhrL0CQVHZ1dxuNQ==" NoCertificadoSAT="00001000000405179095" SelloSAT="DsTXSzE+CTI+c6cobTFhLee2nsQVC+l0Fnjy2+5OTGTUpTWUj7FjpSw/tgHsiSNijTVKuiGuQFanSj2AmZImM6PXaPe06cEpt11PQ6ABOzR2PZpJ0Eanf3/YwpOu4/fyH3euZS/dtLIfZpFOrwAZlhJ7zQCLS7cv2q5dnLRRz9o1PD0yTv/7ECm3mPE30eWXKjsmg46HckzY+mxDWFWmpmhfQGR/PhimThQBq03+WO78ycresk67q5jM1rvmGzNPnh9UIKAEAH4NSsdrCt0jgkff2vOeYCVmsuhBf/y4L9FXid/vAdGS7xMgaBMEP9e1AnEBW1IppbUCaKMZe2jX4g==" /></cfdi:Complemento><cfdi:Addenda><Toyota:AddendaEmisor><Toyota:Toyota><Toyota:Datos email="[email protected]" distFd="57011" fechaEmbarque="2017-11-28" facturaTms="1701842" claveVehicular="1520202" color="058 ICEBERG / FR13 FR13" usado="usado" numMotor="2TR -9145818" otrosCargos="6108.07" netoPagar="338928.57" /></Toyota:Toyota></Toyota:AddendaEmisor></cfdi:Addenda></cfdi:Comprobante>
Buen día estimado, gggirald tienes razón si se parte en 2 el archivo si funciona el código, sin embargo no puedo editar dichos archivos por lo que debo buscar entonces la solución con powershell, de antemano agradezco tu apoyo.
Mi experiencia en PowerShell es muy limitada. Solo recurro a él cuando no soy capaz de resolver algún problema en la shell tradicional de Microsoft (cmd/MSDOS). Me he metido un poco en ello para intentar resolver este caso y este es el script que me ha salido:
$option = [System.StringSplitOptions]::RemoveEmptyEntries $listArch = Get-ChildItem *.xml -Name foreach ($archivo in $listArch) { $data = Select-String -Path $archivo -pattern "Niv=" foreach ($linea in $data) { foreach ($valor in $linea.Line.Split(" ",$option)) { if (($valor.length -gt 2) -And ($valor.Substring(0,3)) -eq "Niv") { $nuevo = $valor.Substring(5,17) + ".xml" ren $archivo $nuevo } } } }
Supongo que tendrás alguna experiencia con Powershell pero por si no fuera así te cuento muy por encima lo que habría que hacer:
1. Salvar lo anterior con un nombre (por ejemplo PRUEBA. PS1). La extensión PS1 es la equivalente a BAT para esta shell. Dejar el archivo en el path de trabajo (donde estén los XML a renombrar)
2. Abrir una ventana de PowerShell. Por ejemplo Inicio\Ejecutar\Powershell. Se abrirá una ventana similar a la de CMD.
3. Situarse en la carpeta de trabajo. A este nivel los comandos habituales de CMD son válidos, por tanto algo como cd "\carpeta trabajo"
4. Ejecutar el script. Aquí, como en Linux, suele ser necesario precederlo de "./". Por tanto sería ./PRUEBA
Pruébalo y me cuentas. He partido de que el nuevo nombre es de 17 caracteres. Para hacer algo más flexible habría que fabricar el nombre nuevo detectando el final del parámetro "Niv" tal vez recorriendo la cadena que sigue hasta encontrar el cierre de las comillas. Pero mi idea es darte un punto de partida puesto que en PowerShell soy probablemente tan novato como tú, o casi.
Se debe descargar el batch del siguiente link
https://www.dostips.com/forum/viewtopic.php?f=3&t=6044
Aquí el código por si alguien más necesita algo similar.
@echo off setlocal EnableExtensions DisableDelayedExpansion set "MessageOutput=" rem Define name of replace tool jrepl.bat with full path. It is expected by rem the code below that this batch file is stored in same directory as the rem batch file. It is of course also possible to have this tool stored in rem a different directory in which case %~dp0 must be replaced by path of rem this directory. set "ReplaceTool=%~dp0jrepl.bat" rem Change the current directory to the directory specified below. pushd "%USERPROFILE%\Desktop\sistemas" rem Get and process a static list of XML files. for /F "delims=" %%I in ('dir *.xml /A-D /B 2^>nul') do call :ProcessXmlFile "%%I" rem JREPL.BAT v7.9 leaves behind JREPL\XBYTES.HEX in folder for temporary files. rd /Q /S "%TEMP%\JREPL" 2>nul rem Restore initial current directory. popd rem Pause script execution if an error message was output because a file rem could not be renamed because of an already existing file with same name. if defined MessageOutput echo/ & pause rem Restore initial environment which means also discarding all environment rem variables defined in this batch file and restore the initial values of rem all other environment variables. endlocal rem Exit processing of this batch file. goto :EOF rem Subroutine ProcessXmlFile reads first line containing case-sensitive rem attribute Niv with a value having at least one character in double rem quotes. Nothing is done if the XML file of which name is passed as rem first argument to the subroutine does not contain such an attribute. rem Both commands of the FOR loop are not executed if the line output by rem FINDSTR is too long for being assigned to environment variable XmlLine. rem In this case it can be expected that the XML file to process contains rem no newline characters. For that reason a copy of the not pretty formatted rem XML file is made with JREPL batch file with file extension TMP instead of rem XML with inserting after every right angle bracket the Windows text file rem line ending characters carriage return (\r) and line-feed (\n). Then the rem temporary file is searched by FINDSTR returning now hopefully a much rem shorter line which can be processed by the Windows command interpreter. rem The temporary file is deleted finally in any case. rem From the XML line containing attribute Niv everything from begin of rem the line to Niv and including Niv itself is removed from the line. rem So the remaining XML line starts with an equal sign and the value rem of attribute Niv enclosed in double quotes. Needed is only the rem attribute value inside the double quotes. rem After having the attribute value it is first checked if the file rem has already the right file name in which case the subroutine can rem be exited immediately and processing continues in main FOR loop. rem Next is checked if no *.xml file with this value as file name exists rem already in current directory. The current XML file is renamed to Niv rem attribute value if this precondition is true. Otherwise an information rem is output and later batch file execution is halted so that the user rem can read this message after finishing processing of all XML files. :ProcessXmlFile echo %1 %SystemRoot%\System32\findstr.exe /R " Niv=\"..*\"" %1 >nul 2>&1 if errorlevel 1 goto :EOF set "XmlFile=%~1" :GetXmlLine for /F "delims=" %%J in ('%SystemRoot%\System32\findstr.exe /R " Niv=\"..*\"" "%XmlFile%"') do ( set "XmlLine=%%J" goto GetNivValue ) if "%XmlFile:~-3%" == "tmp" del "%XmlFile%" & goto :EOF call "%ReplaceTool%" ">" ">\r\n" /XSEQ /F "%XmlFile%" /O "%TEMP%\%~n1.tmp" set "XmlFile=%TEMP%\%~n1.tmp" goto GetXmlLine :GetNivValue if "%XmlFile:~-3%" == "tmp" del "%XmlFile%" setlocal EnableDelayedExpansion set "XmlLine=!XmlLine:* Niv=!" for /F "delims=> = " %%J in ("!XmlLine!") do endlocal & set "NivValue=%%~J" if /I "%NivValue%.xml" == "%~nx1" goto :EOF if not exist "%NivValue%.xml" ren "%~1" "%NivValue%.xml" & goto :EOF echo Error: File "%NivValue%.xml" exists already. echo File %1 cannot be renamed for that reason. set "MessageOutput=1" goto :EOF
- Compartir respuesta