Thaiadmin

สอบถามเรื่องการแทนค่าตัวแปรใน FTP ใน DOS batch command ครับ

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

สอบถามเพื่อนๆพี่ๆ หน่อยครับคือ ผมจะเขียน batch file ftp ครับ แล้วติดปัญหาว่า file ที่ผมจะ FTP ไปวางที่เครื่องปลายทาง ซึ่งชื่อไฟล์เปลี่ยนไปตามวันที่ที่ run file คับ ทำให้ไม่สามารถเจาะจงชื่อไฟล์ที่จะ FTP ได้
ตัวอย่าง code ที่เขียนประมาณนี้คับ
file ที่จะ put ไปยังปลายทางชื่อ dbname_yyyymmdd.zip เช่น dbname_20140709.zip
-------------------------------------------------------
file1.bat
SET bktime=%date:~10,4%%date:~4,2%%date:~7,2%
ftp -s:file2.txt xx.xx.xx.xx
-------------------------------------------------------
file2.txt
user
pass
bin
lcd E:\DATABASE_BACKUP
put dbname_%bktime%.zip
bye
-------------------------------------------------------
ตัวแปร dbname_%bktime%.zip  FTPจะมองเห็นเป็น String คือ dbname_%bktime%.zip ครับ :'(

ไม่ทราบว่ามีวิธีการแก้ไข หรือวิธีอื่นๆอย่างไรบ้างครับที่จะ ftp file ได้ครับ

บุคคลทั่วไป

Re: สอบถามเรื่องการแทนค่าตัวแปรใน FTP ใน DOS batch command ครับ
« ตอบกลับ #1 เมื่อ: 10 กรกฎาคม 2014, 01:04:16 »
ที่ผมใช้อยู่ ก็จะใช้ batch file สร้าง ftp script เอาครับ

ftp -n 10.x.y.z
^
อันนี้จะ ftp เข้าไปก่อน แล้วเชื่อมต่อด้วยผู้ใช้ทีหลังนะครับ

run.cmd (รันที่ Windows นะครับ)
SET bktime=%date:~10,4%%date:~4,2%%date:~7,2%
mkdir %bktime%
cd  %bktime%

rem - สร้าง ftp script
echo user USERNAME PASSWD > temp.ftp
echo bin >> temp.ftp
echo prompt  >> temp.ftp
echo cd /data >> temp.ftp
echo mget * >> temp.ftp
echo bye  >> temp.ftp

rem - รัน ftp
ftp -n 10.1.2.3 < temp.ftp

rem - ลบ temp ทิ้ง
del /q /f temp.ftp

rem - end -

อีกอันที่อยากให้ลองใช้ คือถ้าเรามี ip ที่อยาก connect ด้วย scipt เดียวกัน ก็ใช้ loop ช่วย

ip.txt ใส่ 1 ip ต่อบรรทัด
10.1.2.3
10.1.2.4


run_loop.cmd
... ( command อื่นๆ )
...

for /F %%A in ( ip.txt ) do  (
   ftp -n %%A < temp.ftp
)
...


ราวๆ นี้นะครับ , ถ้าพิมพ์ตก-หล่น ตรงไหน รบกวนลองแก้ไขดูก่อนนะครับ
 :D

บุคคลทั่วไป

Re: สอบถามเรื่องการแทนค่าตัวแปรใน FTP ใน DOS batch command ครับ
« ตอบกลับ #2 เมื่อ: 10 กรกฎาคม 2014, 01:16:34 »
เอ๊า... ไม่ได้อ่านโจทย์
* ที่ยกมาด้านบน คือ เข้าไปเอาไฟล์มาเก็บไว้ในเครื่องเราตามโฟลเดอร์วันที่
* แต่จริงๆ ต้องการเอา E:\DATABASE_BACKUP\dbname_ชื่อตามวัน.zip ไป put ที่ปลายทาง ftp remote

งั้น ... แก้แถวๆ นี้นะครับ (แก้เฉพาะ ftp script)
------------
SET bktime=%date:~10,4%%date:~4,2%%date:~7,2%
...
...
cd E:\DATABASE_BACKUP

rem - สร้าง ftp script
echo user USERNAME PASSWD > temp.ftp
echo bin >> temp.ftp
echo cd SOMEWHERE >> temp.ftp
echo put dbname_%bktime%.zip >> temp.ftp
echo bye  >> temp.ftp
...
ftp -n %%A < temp.ftp
...
...
------------

ส่วนที่เหลือก็ดัดแปลงต่อนะครับ

  :D

Re: สอบถามเรื่องการแทนค่าตัวแปรใน FTP ใน DOS batch command ครับ
« ตอบกลับ #3 เมื่อ: 10 กรกฎาคม 2014, 11:15:16 »
เอ๊า... ไม่ได้อ่านโจทย์
* ที่ยกมาด้านบน คือ เข้าไปเอาไฟล์มาเก็บไว้ในเครื่องเราตามโฟลเดอร์วันที่
* แต่จริงๆ ต้องการเอา E:\DATABASE_BACKUP\dbname_ชื่อตามวัน.zip ไป put ที่ปลายทาง ftp remote

งั้น ... แก้แถวๆ นี้นะครับ (แก้เฉพาะ ftp script)
------------
SET bktime=%date:~10,4%%date:~4,2%%date:~7,2%
...
...
cd E:\DATABASE_BACKUP

rem - สร้าง ftp script
echo user USERNAME PASSWD > temp.ftp
echo bin >> temp.ftp
echo cd SOMEWHERE >> temp.ftp
echo put dbname_%bktime%.zip >> temp.ftp
echo bye  >> temp.ftp
...
ftp -n %%A < temp.ftp
...
...
------------

ส่วนที่เหลือก็ดัดแปลงต่อนะครับ

  :D
-----------------------------------------------

อ่อ จริงด้วยคับ ผมนึกไม่ถึงเลยแหะ เรื่อง echo ใส่ไฟล์ก่อน :D ขอบคุณค๊าบบบบที่ชี้แนะ O0

ผมแปลงมาเขียนประมาณนี้คับ
SET bktime=%date:~10,4%%date:~4,2%%date:~7,2%
set ftpfile="E:\tmp.txt"
e:
cd \DATABASE_BACKUP
echo open xx.xx.xx.xx> %ftpfile%
echo robill>> %ftpfile%
echo ftprobill>> %ftpfile%
echo bin>> %ftpfile%
echo put dbname_%bktime%.zip>> %ftpfile%
echo bye>> %ftpfile%
ftp -s:%ftpfile%

forfiles /p E:\DATABASE_BACKUP /m *.zip /d -5 /c "cmd /c del @file"
-------------------------

Re: สอบถามเรื่องการแทนค่าตัวแปรใน FTP ใน DOS batch command ครับ
« ตอบกลับ #4 เมื่อ: 20 กรกฎาคม 2014, 12:53:48 »
รบกวนสอน get หน่อยครับ ผมไม่มีความรู้ด้านนี้เลย มือใหม่ :D :D :D :D



SET bktime=%date:~10,4%%date:~4,2%%date:~7,2%
set [bgcolor=#FF0000]ftpfile="E:\tmp.txt"[/bgcolor] [bgcolor=#27FF00]ช่วยยกตัวหน่อยครับ[/bgcolor]
e:
cd \DATABASE_BACKUP
echo open xx.xx.xx.xx> %ftpfile%
echo robill>> %ftpfile%
echo ftprobill>> %ftpfile%
echo bin>> %ftpfile%
echo put dbname_%bktime%.zip>> %ftpfile%
echo bye>> %ftpfile%
ftp -s:%ftpfile%

[bgcolor=#FF4400]forfiles /p E:\DATABASE_BACKUP /m *.zip /d -5 /c "cmd /c del @file"[/bgcolor] [bgcolor=#4EFF00]บรรทัดนี้เอาไว้ใช้อะไรครับ[/bgcolor]

Re: สอบถามเรื่องการแทนค่าตัวแปรใน FTP ใน DOS batch command ครับ
« ตอบกลับ #5 เมื่อ: 23 กรกฎาคม 2014, 15:30:54 »
set ftpfile="E:\tmp.txt" ช่วยยกตัวหน่อยครับ
มีไว้ กำหนดตัวแปร ของ FTPFile ครับชื่อมันบอกเป็น Temp อาจจะเป็นรายชื่อแฟ้มชั่วคราว...
เช่นกันการอัปโหลด แฟ้ม ของไดร์ฟ D: ไปที่ ชื่อนี้..ก็แค่ DIR D:\*.* /s /b>e:\tmp.txt
รายชื่อจะลิสต์เข้าไปอยู่ในนั้นหมดแล้วครับ...

forfiles /p E:\DATABASE_BACKUP /m *.zip /d -5 /c "cmd /c del @file" บรรทัดนี้เอาไว้ใช้อะไรครับ
คำสั่งนี้...มีใน Windows 7 ใช้บน XP ไม่ได้
มันกล่าวถึงการเรียกใช้งไฟล์รายชื่อไฟล์ตามเงื่อนไข...ให้พิมพ์ forfiles /? ใน Command Pompt เพื่อดูตัวช่วยนะครับ...

Re: สอบถามเรื่องการแทนค่าตัวแปรใน FTP ใน DOS batch command ครับ
« ตอบกลับ #6 เมื่อ: 26 กรกฎาคม 2014, 11:07:37 »
ขอบคุณครับ
 :D :D :D