Adakah yang bisa membantu dengan cara yang efektif dan aman untuk menghapus kutipan dari variabel batch?
Saya telah menulis file batch yang berhasil mengimpor daftar parameter% 1,% 2,% 3 dll dan menempatkannya ke dalam variabel bernama. Beberapa dari parameter ini mengandung banyak kata, dan karenanya diapit tanda kutip ganda.
> "Susie Jo" (%1)
> "Smith Barnes" (%2)
> "123 E. Main St." (%3)
% Variabel ini selanjutnya ditempatkan dalam variabel bernama:
> set FirstName=%1
> set LastName=%2
> set ShipAddr=%3
verifikasi variabel dilakukan dengan echo.
echo.% FirstName%
echo.% LastName%
echo.% ShipAddr%
hasil ditampilkan sebagai
"Susie Jo"
"Smith Barnes"
"123 E. Main St."
Saya perlu menghilangkan kutipan yang disertakan pada variabel terpilih. Misalnya, NamaDepan dan Nama Belakang digunakan di tempat lain dan tidak boleh menyertakan tanda kutip.
Dalam file batch pengujian saya berhasil menghilangkan tanda kutip menggunakan karakter ~ tilde dalam variabel.
> set FirstName=%~1
> set LastName=%~2
Saya pikir saya punya solusinya, tetapi saya segera mengalami perilaku yang tidak biasa dengan eksekusi file batch. Tiba-tiba CMD tidak mengenali pernyataan jalur panjang. Eksekusi normal file batch dari jalur lengkap
> C:\Documents and Settings\Administrator\My Documents\Txt\batchtest\dataout.bat
kembali
> 'C:\Documents' is not recognized as an internal or external command....
Jadi akan terlihat bahwa penambahan karakter ~ tilde ke variabel% 1% 2 ...% n yang akan datang telah menyebabkan beberapa perubahan. Mungkinkah beberapa variabel lingkungan telah diubah?
Saya juga mencoba menghapus kutipan dari dalam variabel dengan berbagai upaya menggunakan perintah FOR. Tampaknya canggung dan saya tidak dapat mempelajari cara melakukannya dengan membuat daftar variabel untuk melakukan tugas:
sesuatu seperti ini:
for %%g in (%FirstName% %LastName%) do (
set %%g=%%~g
set %%h=%%~h
set FirstName=%%~g
set LastName=%%h
echo.%FirstName% %LastName%
)
Saya pikir saya memiliki dua masalah.
1) Ide 'singkat dan manis' saya untuk memasukkan ~ tilde dalam variabel% 1% 2 yang masuk (% ~ 1, dll) tampaknya telah memengaruhi beberapa pengaturan dan mengubah cara CMD menavigasi nama jalur yang panjang.
2) Saya masih mencari cara yang bersih dan mudah untuk menghilangkan tanda kutip dari variabel bernama yang dipilih.
Bantuan apa pun untuk mereka yang lebih berpengalaman akan sangat dihargai. Keterampilan saya sudah habis di sini ... mohon bantuannya!
edit 26/12/2009 13:36 PST seluruh file batch:
Blockquote
:: dataout.bat
:: revision 12/25/2009 tambahkan ~ tilde ke variabel% yang masuk untuk menghilangkan "tanda kutip" tertanam.
:: menulis daftar alamat menggunakan parameter baris perintah
:: menulis daftar keluaran data untuk QBooks IIF import
:: menulis Data Pesanan Pedagang untuk RUI
:: contoh string baris perintah untuk pengujian
:: listmail [firstname] [lastname] ["address string"] ["city string"] [state] [zip] [Order #] [PurchDate] [Regname] ["FirstName LastName"] [TransactionID] [PaymentMethod] [Total] [ProductID] [Jml] [Price_Each] [PackPrep] [Pengiriman] [CommissionPmt] [Faktur #]
:: contoh: dataout Bellewinkle Moose "123 Green Forest Way" "Vancouver" WA 98664 1004968 05/25/2009 "Bellewinkle Moose" "Olive Oyl" 101738 "On Account" 20.67 FK-1P 1 8.95 3.00 1.39 239
@echo off
cls
c:
cd \
cd documents dan settings \ administrator \ my documents \ txt \ batchtest
echo processing% 1% 2
: VARISET
::Ubah% n parameter baris perintah menjadi variabel string
set ($ FirstName) =% ~ 1
set ($ LastName) =% ~ 2
set ($ BillingAddress1) =% ~ 3
set ($ BillingCity) =% ~ 4
set ($ BillingState) =% ~ 5
set ($ BillingPostal) =% ~ 6
set ($ OrderNumber) =% ~ 7
set ($ Purch_Date) =% ~ 8
set ($ RegistrationName) =% ~ 9
shift
set ($ TransactionID) =% ~ 9
shift
set ($ PaymentMethod) =% ~ 9
shift
set ($ Total) =% ~ 9
shift set ($ ProductIdentifier) =% ~ 9
shift
set ($ Quantity) =% ~ 9
shift
set ($ Price_Each) =% ~ 9
shift
set ($ Pack_Prep) =% ~ 9
shift
set ($ Shipping) =% ~ 9
shift
set ($ ServiceFee) =% ~ 9
shift
set ($ Discount) =% ~ 9
shift
set ($ Invoice) =% ~ 9
shift
set ($ UnitPrice) =% ~ 9
set _ShipCombName =% ($ FirstName)%% ($ LastName)%
nama kombo kapal echo adalah% _ShipCombName%
jeda
:: tulis string variabel ke logfile
echo FN% ($ FirstName)% LN% ($ LastName)% BA% ($ BillingAddress1)%% ($ BillingCity)%% ($ BillingState)%% ($ BillingPostal)%% ($ OrderNumber)%% ($ Purch_Date)%% ($ RegistrationName)%% ($ TransactionID)%% ($ PaymentMethod)%% ($ Total)%% ($ ProductIdentifier)%% ($ Quantity)%% ($ Price_Each) %% ($ Pack_Prep)%% ($ Pengiriman)%% ($ ServiceFee)%% ($ Discount)%% ($ Invoice)%% ($ UnitPrice)%% _ShipCombName% >> d_out_log.txt
:: Tetapkan Akun oleh Penyedia Layanan
IF / i% ($ PaymentMethod)% == Amazon Receivables SET _QBAcct = Amazon.com
:: 12-25-2009 menambahkan metode Amazon pm't kedua untuk keserbagunaan
IF / i% ($ PaymentMethod)% == Amazon SET _QBAcct = Amazon.com
JIKA / i% ($ PaymentMethod)% == SET MAST _QBAcct = Auth / Net
JIKA / 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)% == Pada SET Akun _QBAcct =% ($ RegistrationName)%
IF / i% ($ PaymentMethod)% == SET Surat _QBAcct =% ($ RegistrationName)%
IF / i% ( $ PaymentMethod)% == AMER SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == DISC SET _QBAcct = Auth / Net
:: Tetapkan penunjuk Rep berdasarkan QBAccount
IF / i% ($ PaymentMethod)% == Amazon Receivables SET _Rep = Amazon
:: 12-25-2009 menambahkan metode Amazon pm't kedua untuk keserbagunaan
IF / i% ($ PaymentMethod)% == Amazon SET _Rep = Amazon
IF / i% ($ PaymentMethod)% == MAST SET _Rep = BlueZap
JIKA / i% ($ PaymentMethod)% == MasterCard SET _Rep = BlueZap
JIKA / i% ($ PaymentMethod)% == Visa SET _Rep = BlueZap
JIKA / i% ($ PaymentMethod)% == PayPal SET _Rep = BlueZap
JIKA / i% ($ PaymentMethod)% == SET Akun _Rep = RB
IF / i% ($ PaymentMethod)% == Mail SET _Rep = RB
IF / i% ($ PaymentMethod)% == AMER SET _Rep = BlueZap
JIKA / i % ($ PaymentMethod)% == DISC SET _Rep = BlueZap
:: periksa data alamat duplikat
findstr / i / s "% _ShipCombName%" addrlist.txt
echo errorlevel:% errorlevel%
jika errorlevel 1 goto: ADDRWRITE
jika errorlevel 0 goto: ADDRFOUND
: ALAMAT
echo% _ShipCombName% >> addrlist.txt
echo% ($ BillingAddress1)% >> addrlist.txt
echo% ($ BillingCity)%% ($ BillingState)%% ($ BillingPostal)% >> addrlist.txt
echo. >> addrlist.txt
echo Alamat File Ditulis
: ADDRFOUND
echo perwakilan yang dipilih adalah% _Rep%
akun yang dipilih echo adalah:% _QBAcct%
pause
:: RUI OUT
:: tulis ID Pesanan Pedagang & ID Pesanan RUI ke RUI
:: periksa data RUI duplikat di
cd writeRUI.txt ..
cd RegKOut
temukan / i "% ($ OrderNumber)%" writeRUI.txt
echo errorlevel:% errorlevel%
jika errorlevel 1 goto: RUIWRITE
jika errorlevel 0 goto: IIFWRITE
: RUIWRITE
echo% ($ Invoice)% % ($ OrderNumber)% >> writeRUI.txt
:: end tulis RUI
:: IIF OUT
: IIFWRITE
:: Periksa data faktur duplikat di writeIIF.txt
temukan / i "% ($ OrderNumber)%" writeIIF.txt
echo tingkat kesalahan :% errorlevel%
jika errorlevel 1 goto: HEADWRITE
jika errorlevel 0 goto: LINEWRITE
: HEADWRITE
:: tulis Header, Pengiriman / Penanganan, diskon, Rep & data komisi ke file impor QB IIF
echo% ($ OrderNumber)%% ($ Purch_Date)% Invoice% ($ TransactionID)%% _QBAcct% Account Receivable% ($ Total)%% _Rep % >> writeIIF.txt
echo H / P% ($ Pack_Prep)% 1? >> writeIIF.txt
echo SHP% ($ Pengiriman)% 1? >> writeIIF.txt
echo DISC% ($ Diskon)% 1? >> writeIIF.txt
echo Comm% ($ ServiceFee)% 1? >> writeIIF.txt
: LINEWRITE
IF / i% ($ ProductIdentifier)% equ PH-1 goto WRITE_DEFA ELSE goto WRITE_DISC
echo% ($ ProductIdentifier)%
: WRITE_DISC
:: menulis harga diskon yang diurai dari variabel khusus:
echo% ($ ProductIdentifier) %% ($ Price_Each)%% ($ Quantity)%? >> writeIIF.txt
goto: EOF
: WRITE_DEFA
: menulis harga default yang diurai dari data Produk
echo% ($ ProductIdentifier)%% ($ UnitPrice)%% ($ Quantity)%? >> writeIIF.txt
goto: EOF
:: penundaan 3 detik
:: TYPE NUL | CHOICE.COM / N / CY / TY, 3> NUL
: EOF