Toplu değişkenlerden alıntıları kaldırmanın etkili ve güvenli bir yolu olan var mı?
% 1,% 2,% 3 vb. Parametrelerin bir listesini başarıyla içe aktaran ve bunları adlandırılmış değişkenlere yerleştiren bir toplu iş dosyası yazdım. Bu parametrelerin bazıları birden çok kelime içerir ve bu nedenle çift tırnak içine alınır.
> "Susie Jo" (%1)
> "Smith Barnes" (%2)
> "123 E. Main St." (%3)
Bu% değişkenler, daha sonra adlandırılmış değişkenlere yerleştirilir:
> set FirstName=%1
> set LastName=%2
> set ShipAddr=%3
değişkenlerin doğrulanması yankı ile yapılır.
echo.% FirstName%
echo.% LastName%
echo.% ShipAddr%
sonuçlar şu şekilde görüntülenir
"Susie Jo"
"Smith Barnes"
"123 E. Main St."
Seçili değişkenlere dahil edilen alıntıları kaldırmam gerekiyor. Örneğin, FirstName ve LastName başka yerlerde kullanılır ve tırnak işareti içermemelidir.
Bir test toplu iş dosyasında, değişkenlerde ~ tilde karakterini kullanarak tırnak işaretlerini ortadan kaldırmayı başardım.
> set FirstName=%~1
> set LastName=%~2
Çözüme sahip olduğumu düşündüm, ancak kısa süre sonra toplu iş dosyalarının yürütülmesiyle ilgili olağandışı davranışlarla karşılaştım. Birden CMD, uzun yol durumlarını tanımıyor. Toplu iş dosyasının tam yoldan normal yürütülmesi
> C:\Documents and Settings\Administrator\My Documents\Txt\batchtest\dataout.bat
İadeler
> 'C:\Documents' is not recognized as an internal or external command....
Bu nedenle, gelen% 1% 2 ...% n değişkenlerine ~ tilde karakterinin eklenmesi bazı değişikliklere neden olmuş gibi görünüyor. Muhtemelen bazı ortam değişkenleri değiştirildi?
Ayrıca, FOR komutunu kullanarak çeşitli denemelerle değişken içerisinden alıntıları silmeyi denedim. Bu garip görünüyor ve görevi gerçekleştirmek için bir değişken listesi oluşturarak bunu nasıl başaracağımı öğrenemedim:
bunun gibi bir şey:
for %%g in (%FirstName% %LastName%) do (
set %%g=%%~g
set %%h=%%~h
set FirstName=%%~g
set LastName=%%h
echo.%FirstName% %LastName%
)
Sanırım iki sorunum var.
1) Gelen% 1% 2 değişkenlerine (% ~ 1, vb.) ~ Tilde ekleme konusundaki 'kısa ve öz' fikrim, bazı ayarları etkilemiş ve CMD'nin uzun yol adlarında gezinme şeklini değiştirmiş gibi görünüyor.
2) Seçili adlandırılmış değişkenlerden alıntıları elemek için hala temiz ve kolay bir yol arıyorum.
Daha deneyimli olanlar için herhangi bir yardım çok takdir edilecektir. Burada becerilerimin sonuna geldim ... biraz rehberliğe ihtiyacım var lütfen!
12/26/2009 13:36 PST toplu iş dosyasının tamamını düzenle:
Blockquote
:: dataout.bat
:: revizyon 12/25/2009 gömülü "tırnak işaretlerini ortadan kaldırmak için gelen% değişkenlere ~ tilde ekleyin.
:: adres listesini komut satırı parametrelerini kullanarak
yazar :: QBooks IIF için veri çıktı listesini
yazar import :: writees RUI
:: için Satıcı Sipariş verileri
:: listmail [ad] [soyad] ["adres dizesi"] ["şehir dizesi"] [eyalet] [posta kodu] [Sipariş #] [Satın AlmaTarihi] [Kayıt adı] ["FirstName LastName"] [TransactionID] [PaymentMethod] [Toplam] [ProductID] [Qty] [Price_Each] [PackPrep] [Shipping] [CommissionPmt] [Fatura #]
:: örnek: dataout Bellewinkle Moose "123 Green Forest Way" "Vancouver" WA 98664 1004968 05/25/2009 "Bellewinkle Moose" "Olive Oyl" 101738 "Hesapta" 20.67 FK-1P 1 8.95 3.00 1.39 239
@echo off
cls
c:
cd \
cd belgeleri ve ayarlar \ yönetici \ belgelerim \ txt \ batchtest
echo işleme% 1% 2
: VARISET
::% N komut satırı parametrelerini dizi değişkenlerine dönüştür
($ Ad) =% ~ 1
set ($ Soyadı) =% ~ 2
set ($ BillingAddress1) =% ~ 3
set ($ BillingCity) =% ~ 4
set ($ BillingState) =% ~ 5
set ($ BillingPostal) =% ~ 6
set ($ OrderNumber) =% ~ 7
set ($ Purch_Date) =% ~ 8
set ($ RegistrationName) =% ~ 9
vardiya
seti ($ İşlem Kimliği ) =% ~ 9
vardiya
seti ($ Ödeme Yöntemi) =% ~ 9
vardiya
seti ($ Toplam) =% ~ 9
vardiya seti ($ Ürün Kimliği) =% ~ 9
vardiya
seti ($ Miktar) =% ~ 9
vardiya
seti ($ Price_Each) =% ~ 9
vardiya
seti ($ Pack_Prep) =% ~ 9
vardiya
seti ($ Nakliye) =% ~ 9
vardiya
seti ($ Servis Ücreti) =% ~ 9
vardiya
seti ($ İndirim) =% ~ 9
vardiya
kümesi ($ Fatura) =% ~ 9
vardiya
kümesi ($
UnitPrice ) =% ~ 9 set _hipCombName =% ($ FirstName)%% ($ Soyadı)%
echo gemi birleşik adı% _ShipCombName%
pause
:: logfile
echo FN% ($ FirstName)% LN% ($ Soyadı)% BA% ($ BillingAddress1)%% ($ BillingCity)%% ($ BillingState)%% ($ BillingPostal)%% ($ dize değişkenlerini yaz OrderNumber)%% ($ Purch_Date)%% ($ RegistrationName)%% ($ TransactionID)% ($ PaymentMethod)%% ($ Toplam)%% ($ ProductIdentifier)%% ($ Miktar)%% ($ Price_Each) %% ($ Pack_Prep)% ($ Shipping)%% ($ ServiceFee)%% ($ İndirim)% ($ Invoice)% ($ UnitPrice)%% _ShipCombName% >> d_out_log.txt
:: Hesap atama ölçütü Servis Sağlayıcı
IF / i% ($ PaymentMethod)% == Amazon Receivables SET _QBAcct = Amazon.com
:: 12-25-2009, çok yönlülük için ikinci Amazon pm't yöntemini ekledi
IF / i% ($ PaymentMethod)% == Amazon SET _QBAcct = Amazon.com
IF / i% ($ PaymentMethod)% == MAST SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == MasterCard SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == Visa SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == PayPal SET _QBAcct = PayPalPmts
IF / i% ($ PaymentMethod)% == Hesapta SET _QBAcct =% ($ RegistrationName)%
IF / i% ($ PaymentMethod)% == Mail SET _QBAcct =% ($ RegistrationName)%
IF / i% ( $ PaymentMethod)% == AMER SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == DISC SET _QBAcct = Auth / Net
:: QBAccount
IF / i% ($ PaymentMethod)% == Amazon Alacakları SET _Rep = Amazon
:: 12-25-2009, çok yönlülük için ikinci Amazon pm't yöntemini ekledi
IF / i% ($ PaymentMethod)% == Amazon SET _Rep = Amazon
IF / i% ($ PaymentMethod)% == MAST SET _Rep = BlueZap
IF / i% ($ PaymentMethod)% == MasterCard SET _Rep = BlueZap
IF / i% ($ PaymentMethod)% == Visa SET _Rep = BlueZap
IF / i% ($ PaymentMethod)% == PayPal SET _Rep = BlueZap
IF / i% ($ PaymentMethod)% == Hesapta SET _Rep = RB
IF / i% ($ PaymentMethod)% == Mail SET _Rep = RB
IF / i% ($ PaymentMethod)% == AMER SET _Rep = BlueZap
IF / i % ($ PaymentMethod)% == DISC SET _Rep = BlueZap
:: yinelenen adres verilerini kontrol et
findstr / i / s "% _ShipCombName%" addrlist.txt
echo errorlevel:% errorlevel%
if errorlevel 1 goto:
errorlevel 0 ise ADDRWRITE : ADDRFOUND
: ADDRWRITE
echo% _ShipCombName% >> addrlist.txt
echo% ($ BillingAddress1)% >> addrlist.txt
echo% ($ BillingCity)% ($ BillingState)%% ($ BillingPostal)% >> addrlist.txt
echo. >> addrlist.txt
echo Yazılan Adres Dosyası
: ADDRFOUND
echo seçilen temsilci% _Rep%
echo seçilen hesap:% _QBAcct%
pause
:: RUI OUT
:: Satıcı Sipariş Kimliğini ve RUI Sipariş Kimliğini RUI'ye yazın
:: yinelenen RUI verilerini kontrol edin writeRUI.txt
cd ..
cd RegKOut
find / i "% ($ OrderNumber)%" writeRUI.txt
echo errorlevel:% errorlevel%
if errorlevel 1 goto: RUIWRITE
eğer errorlevel 0 goto: IIFWRITE
: RUIWRITE
echo% ($ Invoice)% % ($ OrderNumber)% >> writeRUI.txt
:: end write RUI
:: IIF OUT
: IIFWRITE
:: writeIIF.txt dosyasında yinelenen fatura verilerini kontrol edin
find / i "% ($ OrderNumber)%" writeIIF.txt
echo errorlevel:% errorlevel%
if errorlevel 1 goto: HEADWRITE
eğer errorlevel 0 goto: LINEWRITE
: HEADWRITE
:: write Başlık, Sevkiyat / İşleme, indirim, Temsilci ve komisyon verilerini QB IIF'ye içe aktarma dosyası
yankısı% ($ Sipariş Numarası)%% ($ Satın Alma_tarihi)% Fatura% ($ İşlem Kimliği)%% _QBAcct% Alacak Hesapları% ($ Toplam)%% _Rep % >> writeIIF.txt
echo H / P% ($ Pack_Prep)% 1? >> writeIIF.txt
echo SHP% ($ Nakliye)% 1? >> writeIIF.txt
echo DISC% ($ İndirim)% 1? >> writeIIF.txt
echo Comm% ($ ServiceFee)% 1? >> writeIIF.txt
: LINEWRITE
IF / i% ($ ProductIdentifier)% equ PH-1 goto WRITE_DEFA ELSE git WRITE_DISC
echo% ($ ProductIdentifier)%
: WRITE_DISC
:: özel değişkenden ayrıştırılan indirimli fiyatları yazar:
echo% ($ ProductIdentifier) %% ($ Price_Each)%% ($ Miktar)%? >> writeIIF.txt
goto: EOF
: WRITE_DEFA
: Ürün verilerinden ayrıştırılan varsayılan fiyatları yazar
echo% ($ ProductIdentifier) %% ($ UnitPrice)%% ($ Quantity)%? >> writeIIF.txt
goto: EOF
:: 3-saniye gecikme
:: TYPE NUL | CHOICE.COM / N / CY / TY, 3> NUL
: EOF