¿Alguien puede ayudar con la forma efectiva y segura de eliminar las cotizaciones de las variables del lote?Eliminar las comillas dobles de las variables en el archivo por lotes crea problemas con el entorno CMD
He escrito un archivo de proceso por lotes que importa con éxito una lista de parámetros% 1,% 2,% 3 etc. y los coloca en variables con nombre. Algunos de estos parámetros contienen varias palabras y, por lo tanto, están entre comillas dobles.
> "Susie Jo" (%1)
> "Smith Barnes" (%2)
> "123 E. Main St." (%3)
Estas variables% están colocados en el próximo variables con nombre:
> set FirstName=%1
> set LastName=%2
> set ShipAddr=%3
verificación de las variables se realiza mediante eco.
eco.% FirstName%
eco.% Apellido%
eco.% ShipAddr%
Mostrar resultados como
"Susie Jo"
"Smith Barnes"
"123 E. Main St."
necesito para eliminar las comillas incluidas en seleccionados variables. Por ejemplo, FirstName y LastName se usan en otro lugar y no deben incluir comillas.
En un archivo por lotes de prueba logré eliminar las comillas usando el caracter ~ tilde en las variables.
> set FirstName=%~1
> set LastName=%~2
Pensé que tenía la solución, pero pronto experimenté un comportamiento inusual con la ejecución de archivos por lotes. De repente, CMD no reconoce sentencias de ruta larga. la ejecución normal del archivo por lotes desde ruta completa
> C:\Documents and Settings\Administrator\My Documents\Txt\batchtest\dataout.bat
vuelve
> 'C:\Documents' is not recognized as an internal or external command....
Por lo tanto, parece que la adición de la tilde ~ a los prometedores en% 1% 2% n variables ... ha causado algún cambio. Posiblemente algunas variables de entorno han sido alteradas?
También traté de borrar citas de dentro de la variable con varios intentos usando el comando FOR. Eso parece torpe y no he sido capaz de aprender cómo lograr esto mediante la creación de una lista de variables para realizar la tarea:
algo como esto:
for %%g in (%FirstName% %LastName%) do (
set %%g=%%~g
set %%h=%%~h
set FirstName=%%~g
set LastName=%%h
echo.%FirstName% %LastName%
)
creo que tengo dos cuestiones.
1) Mi idea 'corta y dulce' de insertar ~ tilde en las% 1% 2 variables entrantes (% ~ 1, etc.) parece haber afectado algunas configuraciones y alterado la forma en que CMD navega nombres de ruta largos.
2) Todavía estoy en busca de una manera limpia y fácil de eliminar las citas de las variables nombradas seleccionadas.
Cualquier ayuda para los más experimentados sería muy apreciada. Estoy al final de mis habilidades aquí ... necesito orientación, por favor!
editar 12/26/2009 13:36 PST archivo todo el lote:
cita en bloque
:: dataout.bat
:: revisión 12/25/2009 complemento ~ tilde a las variables de entrada% para eliminar incrustados "entre comillas.
:: escribe lista de direcciones utilizando la línea de comandos parámetros
:: escribe lista de salida de datos para importar QBooks IIF
:: escribe datos de pedido del comerciante para RUI
:: cadena de línea de comandos de muestra para probar
:: listmail [firstname] [lastname] ["cadena de dirección"] ["cadena de ciudad"] [estado] [zip] [N.º de pedido] [PurchDate] [Regname] [" FirstName LastName "] [TransactionID] [PaymentMethod] [Total] [ProductID] [Qty] [Price_Each] [PackPrep] [Shipping] [CommissionPmt] [Factura] #
:: example: dataout Bellewinkle Moose" 123 Green Forest Way " "Vancouver" WA 98664 1004968 25/05/2009 "Bellewinkle Moose" "Olive Oyl" 101738 "En cuenta" 20.67 FK-1P 1 8.95 3.00 1.39 239
@echo off cls
c:
cd \ cd
documentos y ajustes \ Administrador \ Mis documentos \ txt \ batchtest
echo% 1% 2 procesamiento
: VARISET
:: Convert % parámetros de línea de comando n a variables de cadena
conjunto ($ FirstName) =% ~ 1
conjunto ($ LastName) =% ~ 2
conjunto ($ BillingAddress1) =% ~ 3
conjunto ($ BillingCit y) =% ~ 4
conjunto ($ BillingState) =% ~ 5
conjunto ($ BillingPostal) =% ~ 6
conjunto ($ OrderNumber) =% ~ 7
conjunto ($ Purch_Date) =% ~ 8
conjunto ($ RegistrationName) =% ~ 9
cambio
conjunto ($ TransactionID) =% ~ 9
cambio
conjunto ($ PaymentMethod) =% ~ 9
cambio
conjunto ($ total) = % ~ 9
shift conjunto ($ ProductIde ntifier) =% ~ 9
cambio
conjunto ($ Cantidad) =% ~ 9
cambio
conjunto ($ Price_Each) =% ~ 9
cambio
conjunto ($ Pack_Prep) =% ~ 9
cambiar
conjunto ($ envío) =% ~ 9
cambio
conjunto ($ servicefee) =% ~ 9
cambio
conjunto ($ Descuento) =% ~ 9
cambio
conjunto ($ Factura) =% ~ 9
cambio
conjunto ($ PrecioUnidad) =% ~ 9
conjunto _ShipCombName =% ($ FirstName)%% ($ Apellidos)%
eco nombre combinado barco es% _ShipCombName
pausa
cadena :: write% varibables a logfile
eco FN% ($ FirstName)% LN% ($ Apellidos)% BA% ($ BillingAddress1)%% ($ BillingCity)%% ($ BillingState)% % ($ BillingPostal)%% ($ OrderNumber)%% ($ Purch_Date)%% ($ RegistrationName)%% ($ TransactionID)%% ($ PaymentMethod)%% ($ Total)%% ($ ProductIdentifier)%% ($ Cantidad)%% ($ Price_Each)%% ($ Pack_Prep)%% ($ Shipping)%% ($ ServiceFee)%% ($ Discount)%% ($ Invoice)%% ($ UnitPrice)% % _ShipCombName% >> d_out_log.txt
:: Asignar cuenta el Proveedor de Servicios
SI/i% ($ PaymentMethod) ==% Amazon cobrar La _QBAcct = Amazon.com
:: 25/12/2009 añadió segundo Amazon pm't método de versatilidad
IF/i% ($ PaymentMethod)% == Amazon SET _QBAcct = Amazon.com
SI/i% ($ PaymentMethod) ==% de MAST SET _QBAcct = Aut/Net
SI/i% ($ PaymentMethod) ==% MasterCard SET _QBAcct = Aut/Net
SI/i% ($ PaymentMethod)% == Visa SET _QBAcct = Auth/Net
IF/i% ($ PaymentMethod)% == PayPal SET _QBAcct = PayPalPmts
IF/i% ($ PaymentMethod)% == Cuenta activa SET _QBAcct =% ($ RegistrationName)%
SI/i% ($ PaymentMethod)% == electrónico conjunto _QBAcct =% ($ RegistrationName)%
SI/i% ($ PaymentMethod) ==% AMER SET _QBAcct = Aut/Net
SI/i% ($ PaymentMethod)% == DISC SET _QBAcct = Auth/Net
:: Assign Rep designador basado en QBAccount
IF/i% ($ PaymentMethod)% == Amazon cobrar SET _rep = Amazon
:: 25/12/2009 añadió segundo método pm't Amazon para versatilidad
IF/i% ($ PaymentMethod)% == Amazon SET _Rep = Amazon
IF/i% ($ PaymentMethod)% == MAST SET _Rep = BlueZap
SI/i% ($ PaymentMethod)% == MasterCard SET _Rep = BlueZap
SI/i% ($ PaymentMethod) ==% Visa SET _rep = BlueZap
SI/i% ($ PaymentMethod) ==% PayPal SET _rep = BlueZap
SI/i% ($ PaymentMethod)% == En Cuenta SET _Rep = RB
SI/i% ($ PaymentMethod)% == electrónico conjunto _rep = RB
SI/i% ($ PaymentMethod) ==% AMER SET _rep = BlueZap
SI/i% ($ PaymentMethod) ==% DISCOS _rep = BlueZap
:: comprobar datos de direcciones duplicadas
findstr/i/s "% _ShipCombName%" addrlist.txt
eco errorlevel:% errorlevel%
si errorlevel 1 Goto: ADDRWRITE
si errorlevel 0 Ir a: ADDRFOUND
: ADDRWRITE
echo% _ShipCombName% >> addrlist.txt
e cho% ($ BillingAddress1)% >> addrlist.txt
echo% ($ BillingCity)%% ($ BillingState)%% ($ BillingPostal)% >> addrlist.txt
eco. >> addrlist.txt Archivo
eco dirección escrita
: ADDRFOUND
eco seleccionado es representante% _rep%
eco seleccionado se cuenta:% _QBAcct%
pausa
:: RUI OUT
:: escribir pedido del comerciante Identificación & RUI ID pedido a Rui
:: comprobar si hay datos RUI duplicado en writeRUI.txt
cd .. cd
RegKOut
find/i "% ($ OrderNumber)%" writeRUI.txt
eco nivel de error:% errorlevel%
si errorlevel 1 Ir a: RUIWRITE
si errorlevel 0 Ir a: IIFWRITE
: RUIWRITE
echo% ($ Factura)%% ($ OrderNumber) >> writeRUI%.txt
:: extremo de escritura RUI
:: IIF OUT
: IIFWRITE
:: Compruebe si hay datos de las facturas duplicadas en writeIIF.txt
find/i "% ($ OrderNumber)%" writeIIF.txt
eco nivel de error:% errorlevel%
si errorlevel 1 Ir a: HEADWRITE
si errorlevel 0 Ir a: LINEWRITE
: HEADWRITE
:: escribir Cabecera, Barco/manipulación, descuento, Rep & datos de la comisión a archivo de importación QB IIF
echo% ($ OrderNumber)%% ($ Purch_Date)% Invoice% ($ TransactionID)%% _QBAcct% Cuentas por cobrar% ($ Total)%% _Rep% >> writeIIF.txt
echo H/P% ($ Pack_Prep)% 1? >> writeIIF.txt
echo SHP% ($ Shipping)% 1? >> writeIIF.txt
echo DISC% ($ Discount)% 1? >> writeIIF.txt
echo Comm% ($ ServiceFee)% 1? >> writeIIF.txt
: LINEWRITE
SI/i% ($ ProductIdentifier) equ% PH-1 Goto WRITE_DEFA WRITE_DISC ELSE Goto
echo% ($ ProductIdentifier)%
: WRITE_DISC
:: escribe precios reducidos analiza de la variable personalizada:
echo% ($ ProductIdentifier)%% ($ Price_Each)%% ($ Quantity)%? >> writeIIF.txt
Ir a: EOF
: WRITE_DEFA
: escribe precios predeterminados analizan a partir de datos de producto
echo% ($ ProductIdentifier)%% ($ PrecioUnidad)%% ($ Cantidad)%? >> writeIIF.txt
pase a: EOF
:: Retraso de 3 segundos
:: TYPE NUL | CHOICE.COM/N/CY/TY, 3> NUL
: EOF
¿Podría usar PowerShell para hacer esto? Sospecho que obtendrás un poco más de control si usas PowerShell. –
Comprobé el archivo por lotes, parece funcionar bien (después de haber arreglado la línea "shift set ($ ProductIdentifier) =% ~ 9" - que, creo, es un artefacto de copiar y pegar aquí) . – atzz
Gracias Robert Harvey; He estado viendo PowerShell. No tengo mucha experiencia con programación ... no estoy seguro de cómo sería la curva de aprendizaje. Tengo algo de experiencia con archivos por lotes, razón principal por la que elegí esto. Tengo la intención de compilar el lote para que funcione más rápido. Gracias por responder. – BobB