กลุ่มผู้ดูแลระบบแห่งประเทศไทย กลุ่มผู้ดูแลระบบแห่งประเทศไทย
31 กรกฎาคม 2010, 07:05:40 *
ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน
ส่งอีเมล์ยืนยันการใช้งาน?

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น
ข่าว: [ประกาศ] เปิดคอร์สอบรม CCNA วันที่ 7-8, 21-22 สิงหาคม นี้
Google
  หน้าแรก   เวบบอร์ด   ค้นหา ช่วยเหลือ เจ้าหน้าที่ เข้าสู่ระบบ สมัครสมาชิก  


+ กลุ่มผู้ดูแลระบบแห่งประเทศไทย » Developer Zone » Script Center » หัวข้อ:
|-+ อยาก Batch file ที่ใช้ในการ copy ตามวันที่ อัตโนมัติ อะครับ


หน้า: [1]   ลงล่าง
  เพิ่มบุ้คมาร์ค  |  พิมพ์  
ผู้เขียน หัวข้อ: อยาก Batch file ที่ใช้ในการ copy ตามวันที่ อัตโนมัติ อะครับ  (อ่าน 3881 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
YOOKUNG
*

Savant Grade 1

สมาชิกลำดับที่ 44337

ออฟไลน์ ออฟไลน์

จิตพิสัย: 0

กระทู้: 264
Posting Frequency






 ระดับถัดไป:
 70% ( 14 / 20 )

« เมื่อ: 7 เมษายน 2009, 11:56:01 »

อยาก Batch file ที่ใช้ในการ copy ตามวันที่อะครับ มีใครพอมีบ้างครับ  Afro Afro

บันทึกการเข้า

NR IT Engineering >>> www.nairong.com External Link
บทเรียนฟรี สำหรับมัธยม! >>> www.thetutorking.com External Link
inoomudon
**

Intelligent Layer 2

สมาชิกลำดับที่ 42514

ออฟไลน์ ออฟไลน์

จิตพิสัย: 1

กระทู้: 384
Posting Frequency






 ระดับถัดไป:
 70% ( 14 / 20 )

« ตอบ #1 เมื่อ: 7 เมษายน 2009, 12:00:26 »

อยาก Batch file ที่ใช้ในการ copy ตามวันที่อะครับ มีใครพอมีบ้างครับ  Afro Afro

ใช้ scheduled tasks ช่วยสิครับ สั่งให้รันตามวันเวลาได้

บันทึกการเข้า

เมื่อครั้งกาลก่อน ยังเคยอ่อนด้อย
ณ เพลานี้ ก็ยังอ่อนด้อยอยู่ดี -  -*
หนุ่มเมืองน่าน
*****

Thaiadmin Global Staff
Thaiadmin Professional
Thaiadmin Writer

สมาชิกลำดับที่ 1218

เพศ: ชาย ออฟไลน์ ออฟไลน์

จิตพิสัย: 17

กระทู้: 888
Posting Frequency


อยู่ด้วยศรัทธา มาด้วยใจพร้อม






 ระดับถัดไป:
 60% ( 18 / 30 )

« ตอบ #2 เมื่อ: 7 เมษายน 2009, 12:10:47 »

ใช้ %date% ช่วยใน Batch File ครับ

เช่น Copy C:\FileA.xls D:\Backup\FileA_%date:/=-%.xls

คำอธิบาย %date:/=-%

ปกติถ้าเราใช้ %date% รูปแบบวันที่มันจะออกมาเป็น DDD DD/MM/YYYY
แต่ / ใช้ตั้งชื่อไฟล์ไม่ได้
เลยสั่งให้ / เป็น - แทน ก็จะได้เป็น DDD DD-MM-YYYY

แล้วค่อยเอาไปใส่ใน Schedule Task อีกที หรือจะใช้ At Command ช่วยก็ได้ เช่น
AT 12:00 "Copy C:\FileA.xls D:\Backup\FileA_%date:/=-%.xls"


 Wink

บันทึกการเข้า

รับติดตั้งระบบ : MS Terminal Server, MS Exchange 2007/2010, VoIP, Network, HotSpot, CCTV, Power Management ฯลฯ


+ + + สอบถามปัญหาต่าง ๆ กรุณาตั้งกระทู้ถามที่กระดานสนทนานะครับ ไม่รับประกันหรือไม่รับตอบปัญหาทางข้อความส่วนตัว อีเมล์ และโปรแกรมแชท ถามคนเดียว รู้คนเดียว ตอบไม่ได้ เดี๋ยวจะเคืองกันอีก (นิสัย นิสัย พระมหาสมปองว่าไว้) อิ อิ + + +

-*- หมูอ้วนสุดหล่อ -*-
-<SAKURA>-^-
*****

Thaiadmin Meeting

สมาชิกลำดับที่ 2231

เพศ: หญิง ออฟไลน์ ออฟไลน์

จิตพิสัย: 7

กระทู้: 250
Posting Frequency


TH@min Membership






สมบูรณ์ 100%

« ตอบ #3 เมื่อ: 7 เมษายน 2009, 13:10:24 »

หมายถึงว่าให้ copy file ที่ถูกสร้างในแต่ละวันหรือเปล่า ลองใช้ robocopy ซิ มันอยู่ใน Resource Tool kit ของ Microsoft มันสร้างเงื่อนไขการ copy ได้



Confirmed by: TechToy

บันทึกการเข้า

<b>กลุ่มผู้ดูแลระบบแห่งประเทศไทย ขอระงับการใช้ลายเซ็นต์รูปภาพ
อนุญาตให้ใช้ได้เพียง ลายเซ็นต์ที่เป็นข้อความ
จึงประกาศมาเพื่อขอความร่วมมือ จากสมาชิกทุกๆ ท่าน
ในนาม กลุ่มผู้ดูแลระบบแห่งประเทศไทย</b>
nateekakaw
**

Proficient Level 2

สมาชิกลำดับที่ 25689

ออฟไลน์ ออฟไลน์

จิตพิสัย: 0

กระทู้: 152
Posting Frequency






 ระดับถัดไป:
 20% ( 2 / 10 )

« ตอบ #4 เมื่อ: 4 พฤศจิกายน 2009, 20:55:40 »

ใช้ %date% ช่วยใน Batch File ครับ

เช่น Copy C:\FileA.xls D:\Backup\FileA_%date:/=-%.xls

คำอธิบาย %date:/=-%

ปกติถ้าเราใช้ %date% รูปแบบวันที่มันจะออกมาเป็น DDD DD/MM/YYYY
แต่ / ใช้ตั้งชื่อไฟล์ไม่ได้
เลยสั่งให้ / เป็น - แทน ก็จะได้เป็น DDD DD-MM-YYYY

แล้วค่อยเอาไปใส่ใน Schedule Task อีกที หรือจะใช้ At Command ช่วยก็ได้ เช่น
AT 12:00 "Copy C:\FileA.xls D:\Backup\FileA_%date:/=-%.xls"


 Wink
  ขอบคุณมากครับ ท่านหนุ่มเมืองน่าน

เป็นสิ่งที่ผมกำลังหา script แบบนี้พอดีเลย แต่ว่าพอลอง test run แล้วมัน error อ่า





* error.JPG (35.81 KB, 668x336 - ดู 108 ครั้ง.)
บันทึกการเข้า

กลุ่มผู้ดูแลระบบแห่งประเทศไทย ขอระงับการใช้ลายเซ็นต์รูปภาพ
อนุญาตให้ใช้ได้เพียง ลายเซ็นต์ที่เป็นข้อความ
จึงประกาศมาเพื่อขอความร่วมมือ จากสมาชิกทุกๆ ท่าน
ในนาม กลุ่มผู้ดูแลระบบแห่งประเทศไทย
Keigo
*****

Thaiadmin VIP

สมาชิกลำดับที่ 5266

เพศ: ชาย ออฟไลน์ ออฟไลน์

จิตพิสัย: 18

กระทู้: 701
Posting Frequency


TH@min Membership






 ระดับถัดไป:
 2% ( 1 / 50 )

« ตอบ #5 เมื่อ: 4 พฤศจิกายน 2009, 21:36:03 »

ลองแบบนี้สิ ใช้ double quote ช่วย เพราะ return string ที่ได้กลับมามันมี space ด้วย

Copy C:\FileA.xls D:\Backup\FileA_"%date:/=-%".xls

หรือ

Copy C:\FileA.xls D:\Backup\"FileA %date:/=-%".xls

บันทึกการเข้า

<b>When we wake up in the morning, we have two simple choices. Go back to sleep and dream, or wake up and chase those dreams.</b>
nateekakaw
**

Proficient Level 2

สมาชิกลำดับที่ 25689

ออฟไลน์ ออฟไลน์

จิตพิสัย: 0

กระทู้: 152
Posting Frequency






 ระดับถัดไป:
 20% ( 2 / 10 )

« ตอบ #6 เมื่อ: 6 พฤศจิกายน 2009, 18:05:10 »

ลองแบบนี้สิ ใช้ double quote ช่วย เพราะ return string ที่ได้กลับมามันมี space ด้วย

Copy C:\FileA.xls D:\Backup\FileA_"%date:/=-%".xls

หรือ

Copy C:\FileA.xls D:\Backup\"FileA %date:/=-%".xls
ขอบคุณมากครับผม ใช้ได้เลยแบบบนี้อ่า
 Afro Afro Afro Afro Afro Afro

แต่ถ้าแบบว่า Data ที่ backup มาเป็นของวันจริงแต่เปลี่ยนชื่อเป็น ลบไปหนึ่งวันพอจะทำได้ไหมอ่าครับ  เช่น

วันนี้เป็นวันที่ 6 november ถ้าตาม script จะได้ "   FileA 11-06-2009  "
 
 แต่ถ้าให้ ชื่อ ไฟล์เป็น  " FileA 11-05-2009 "ได้ไหมอ่าครับ  แต่เป็น data จริงเป็น ของวันที่ 6 อ่า


ขอบคุณมากครับท่าน Keigo

บันทึกการเข้า

กลุ่มผู้ดูแลระบบแห่งประเทศไทย ขอระงับการใช้ลายเซ็นต์รูปภาพ
อนุญาตให้ใช้ได้เพียง ลายเซ็นต์ที่เป็นข้อความ
จึงประกาศมาเพื่อขอความร่วมมือ จากสมาชิกทุกๆ ท่าน
ในนาม กลุ่มผู้ดูแลระบบแห่งประเทศไทย
Keigo
*****

Thaiadmin VIP

สมาชิกลำดับที่ 5266

เพศ: ชาย ออฟไลน์ ออฟไลน์

จิตพิสัย: 18

กระทู้: 701
Posting Frequency


TH@min Membership






 ระดับถัดไป:
 2% ( 1 / 50 )

« ตอบ #7 เมื่อ: 6 พฤศจิกายน 2009, 21:19:06 »

พอเป็นพิธี เอาไปเขียนเพิ่มเงื่อนไขเอาเพื่อความถูกต้องนะเพราะวิธีนี้วันที่ 1 มันจะแสดง เป็น 0 ไม่ใช่ 30 หรือ 31 (ยังไม่รวม ก.พ. เจ้าปัญหานะ) เช่น ถ้า yesterday ได้เท่ากับ 0 ของเดือน 04, 06, 09, 11 ให้แปลงเป็น 30; 01, 03, 05, 07, 08, 10, 12 ให้แปลงเป็น 31 อีกทั้งต้องลดค่าของเดือนลงด้วยหนึ่ง ฯลฯ

@ECHO OFF

for /f "tokens=1,2,3,4 delims=/ " %%a in ("%date%") do set wday=%%a&set month=%%b&set day=%%c&set year=%%d

echo.Weekday: %wday%
echo.Month  : %month%
echo.Day    : %day%
echo.Year   : %year%

set /a yesterday=%day% - 1
copy C:\FileA.xls D:\Backup\"FileA 0%yesterday%-%month%-%year%".xls

บันทึกการเข้า

<b>When we wake up in the morning, we have two simple choices. Go back to sleep and dream, or wake up and chase those dreams.</b>
nateekakaw
**

Proficient Level 2

สมาชิกลำดับที่ 25689

ออฟไลน์ ออฟไลน์

จิตพิสัย: 0

กระทู้: 152
Posting Frequency






 ระดับถัดไป:
 20% ( 2 / 10 )

« ตอบ #8 เมื่อ: 6 พฤศจิกายน 2009, 22:54:55 »

พอเป็นพิธี เอาไปเขียนเพิ่มเงื่อนไขเอาเพื่อความถูกต้องนะเพราะวิธีนี้วันที่ 1 มันจะแสดง เป็น 0 ไม่ใช่ 30 หรือ 31 (ยังไม่รวม ก.พ. เจ้าปัญหานะ) เช่น ถ้า yesterday ได้เท่ากับ 0 ของเดือน 04, 06, 09, 11 ให้แปลงเป็น 30; 01, 03, 05, 07, 08, 10, 12 ให้แปลงเป็น 31 อีกทั้งต้องลดค่าของเดือนลงด้วยหนึ่ง ฯลฯ

@ECHO OFF

for /f "tokens=1,2,3,4 delims=/ " %%a in ("%date%") do set wday=%%a&set month=%%b&set day=%%c&set year=%%d

echo.Weekday: %wday%
echo.Month  : %month%
echo.Day    : %day%
echo.Year   : %year%

set /a yesterday=%day% - 1
copy C:\FileA.xls D:\Backup\"FileA 0%yesterday%-%month%-%year%".xls
ขอบคุณมากๆครบ ท่าน Keigo

เก่งมากๆเลย ว่าแต่รบกวน สอบถามเกี่ยวกับ script ว่า
tokens=1,2,3,4 delims=  หมายความว่าอยางไรอ่าครับผม




ขอบคุณมากๆอีกครั้งครับ

บันทึกการเข้า

กลุ่มผู้ดูแลระบบแห่งประเทศไทย ขอระงับการใช้ลายเซ็นต์รูปภาพ
อนุญาตให้ใช้ได้เพียง ลายเซ็นต์ที่เป็นข้อความ
จึงประกาศมาเพื่อขอความร่วมมือ จากสมาชิกทุกๆ ท่าน
ในนาม กลุ่มผู้ดูแลระบบแห่งประเทศไทย
~ RoNiN ~
*****

Thaiadmin Staff

สมาชิกลำดับที่ 56

เพศ: ชาย ออนไลน์ ออนไลน์

จิตพิสัย: 7

กระทู้: 477
Posting Frequency


ทำดีแต่อย่าเด่นจะเป็นภัย






 ระดับถัดไป:
 39.17% ( 47 / 120 )

« ตอบ #9 เมื่อ: 6 พฤศจิกายน 2009, 23:17:47 »

FOR /? จะเห็นคำตอบครับ Grin

☆.•:*` RoniN `*:•.☆
บันทึกการเข้า

Find Some Things
โมโม
บุคคลทั่วไป
« ตอบ #10 เมื่อ: 26 พฤศจิกายน 2009, 15:01:12 »

อยากขอสคริป ที่สั่งให้backup file ทุกวันเวลาเที่ยงคืน และรับวันที่อัตโนมัติ แล้วพอขึ้นเดือนใหม่ให้ลบข้อมูลเดือนเก่าออกด้วย เช่น สมมุติวันนี้วันที่ 26-11-52 พอวันที่ 26-12-52 ให้backup แล้วลบข้อมูลของวันที่ 26-11-52 ด้วยหน่ะค่ะ รบกวนหน่อยนะคะ หรือแอดเมลล์มาคุยก็ได้ค่ะ ขอบพระคุณล่วงหน้า

บันทึกการเข้า
หนุ่มเมืองน่าน
*****

Thaiadmin Global Staff
Thaiadmin Professional
Thaiadmin Writer

สมาชิกลำดับที่ 1218

เพศ: ชาย ออฟไลน์ ออฟไลน์

จิตพิสัย: 17

กระทู้: 888
Posting Frequency


อยู่ด้วยศรัทธา มาด้วยใจพร้อม






 ระดับถัดไป:
 60% ( 18 / 30 )

« ตอบ #11 เมื่อ: 17 กุมภาพันธ์ 2010, 13:55:27 »

กระทู้นี้นานแล้วนะครับ

เมื่อกี้มีเพื่อนผมคนนึงถามมา ว่า แล้วถ้าจะสร้าง Folder เป็น YYYY-MM-DD ล่ะ จะต้องทำยังไง

นั่งคิดอยู่ครู่นึง ไม่ไหว หิว ไปกินข้าวก่อนดีกว่า อิ อิ
เสร็จแล้วพอกลับมาอีกที

เอ...คำสั่งบน DOS น่าจะมีพวก Format, Left, Right, Mid ฯลฯ อะไรพวกนี้อยู่หรือเปล่าหว่า...
เลยลองค้นดู ก็พอมั่ว ๆ เอาได้นะครับ

ก่อนอื่นเรามาพูดถึงตัวแปร %DATE% บน DOS กันก่อนดีกว่า

ถ้าเราสั่ง echo %date%
มันจะ Return String มาในรูปแบบ DDD MM/DD/YYYY
ยกตัวอย่างเช่น Wed 02/17/2010
คาดว่าน่าจะเหมือนกันทุก DOS หรือ Windows นะ อันนี้ผมก็ไม่แน่ใจเหมือนกัน

ลองค้นดู Forum ต่างประเทศ ก็พบว่ามีคำสั่งคล้าย ๆ คำสั่ง Mid ใน VBScript เหมือนกัน
เลยลองเอาใช้ดู

ตัวอย่างเช่น echo "%date:~10,4%-%date:~4,2%-%date:~7,2%"
หรือ echo "%date:~-4,4%-%date:~-10,2%-%date:~-7,2%"
ก็จะได้ออกมาเป็น 2010-02-17
อืมส์....ใช้ได้ เอาวิธีนี้แหละ

มาดูกัน คำสั่งที่อยู่หลัง :~ น่าจะใช้แทนตำแหน่งเริ่มต้น และ , ใช้คั่นจำนวนหลัก (เหมือนคำสั่ง Mid เลย)
ดังจะเห็นได้ว่าถ้าเราใช้ echo %date%
มันจะออกมาเป็น Wed 02/17/2010

ก็เทียบได้กับว่า
%date:~10,4% = ให้เริ่มตั้งแต่ตำแหน่งหลังจาก 10 (ตำแหน่งที่ 11) ก็เท่ากับเลข 2 พอดี แล้วนับไป 4 ตัว ก็ได้ 2010
%date:~4,2% = ให้เริ่มตั้งแต่ตำแหน่งหลังจาก 4 (ตำแหน่งที่ 5) ก็เท่ากับเลข 0 พอดี แล้วนับไป 2 ตัว ก็ได้ 02
%date:~7,2% = ให้เริ่มตั้งแต่ตำแหน่งหลังจาก 7 (ตำแหน่งที่ 8 ) ก็เท่ากับเลข 1 พอดี แล้วนับไป 2 ตัว ก็ได้ 17

* ส่วนอันที่ echo "%date:~-4,4%-%date:~-10,2%-%date:~-7,2%" เข้าใจว่า เหมือน StrRev ใน VBScript เป็นการนับจากข้างหลังไปข้างหน้า เข้าใจว่าอย่างงี้นะครับ


ดังนั้น ถ้าจะใช้สร้างโฟลเดอร์ ก็ใช้คำสั่งนี้เลย
md "%date:~10,4%-%date:~4,2%-%date:~7,2%"

หรือจะ Add เป็น Schedule ไว้ก็ได้ ด้วยคำสั่ง AT
ตัวอย่าง
at 0:00 md "%date:~10,4%-%date:~4,2%-%date:~7,2%"

หรือให้ทำทุกวัน ตอนเที่ยงคืน ก็
at 0:00 /every:m,t,w,th,f,s,su md "%date:~10,4%-%date:~4,2%-%date:~7,2%"


ประมาณนี้ครับ ลองเอาไปใช้ดู....

บันทึกการเข้า

รับติดตั้งระบบ : MS Terminal Server, MS Exchange 2007/2010, VoIP, Network, HotSpot, CCTV, Power Management ฯลฯ


+ + + สอบถามปัญหาต่าง ๆ กรุณาตั้งกระทู้ถามที่กระดานสนทนานะครับ ไม่รับประกันหรือไม่รับตอบปัญหาทางข้อความส่วนตัว อีเมล์ และโปรแกรมแชท ถามคนเดียว รู้คนเดียว ตอบไม่ได้ เดี๋ยวจะเคืองกันอีก (นิสัย นิสัย พระมหาสมปองว่าไว้) อิ อิ + + +

-*- หมูอ้วนสุดหล่อ -*-
กลุ่มผู้ดูแลระบบแห่งประเทศไทย
   


โปรดอ่านกฎกติกาก่อนแสดงความคิดเห็น


1. โปรดงดเว้น การใช้คำหยาบคาย ส่อเสียด ดูหมิ่น กล่าวหาให้ร้าย สร้างความแตกแยก หรือกระทบถึงสถาบันอันเป็นที่เคารพ
2. ข้อความหรือรูปภาพที่ปรากฏในกระทู้ที่ท่านเห็นอยู่นี้ เกิดจากการตั้งกระทู้และถูกส่งขึ้นเวบบอร์ดโดยอัตโนมัติจากบุคคลทั่วไปและสมาชิก
ซึ่งทีมงานกลุ่มผู้ดูแลระบบแห่งประเทศไทย มิได้มีส่วนร่วมรู้เห็น หรือพิสูจน์ข้อเท็จจริงใดๆ ทั้งสิ้น
และไม่สามารถนำไปอ้างอิงทางกฎหมายได้
3. หากท่านพบเห็นข้อความ หรือรูปภาพในกระทู้ที่ไม่เหมาะสม กรุณาแจ้งทีมงานทราบ เพื่อดำเนินการต่อไป
4. ทีมงานกลุ่มผู้ดูแลระบบแห่งประเทศไทย ขอสงวนสิทธิ์ในการลบความคิดเห็น โดยไม่ต้องชี้แจงเหตุผลใดๆ ต่อเจ้าของความคิดเห็นนั้น

 บันทึกการเข้า
หน้า: [1]   ขึ้นบน
  เพิ่มบุ้คมาร์ค  |  พิมพ์  
+ กลุ่มผู้ดูแลระบบแห่งประเทศไทย » Developer Zone » Script Center » หัวข้อ:
|-+ อยาก Batch file ที่ใช้ในการ copy ตามวันที่ อัตโนมัติ อะครับ


 
กระโดดไป:  



Powered by MySQL Powered by PHP Powered by SMF 1.1.11 Thaiadmin Edition | Sitemap| SMF © 2006-2009, Simple Machines LLC
Thai Language by ThaiSMF. Modifications by Thaiadmin Group. Co-Location by SiamBOX
DELL 860 Server Support by ETNS. Memory for Server by Memory Today.
Valid XHTML 1.0! Valid CSS!
หน้านี้ถูกสร้างขึ้นภายในเวลา 0.074 วินาที กับ 49 คำสั่ง

Google visited last this page เมื่อวานนี้ เวลา 18:07:58