Thaiadmin

***รบกวน ขอความรู้หน่อยครับ Batch File ***

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

***รบกวน ขอความรู้หน่อยครับ Batch File ***
« เมื่อ: 11 มิถุนายน 2014, 11:24:54 »
พอดีผมพยายามทำ Batch file เพื่อเช็ค Folder ใน Server ว่ามี files ชื่อนี้อยู่หรือไม่ ถ้ามี ก็ให้สร้าง Folder ตามชื่อที่กำหนด ดังโค้ดด้านล่าง
--------------------------------------------------------------------------------------------------------
@echo  off
                 set folder=%Date:~-4,4%%Date:~-10,2%%Date:~-7,2%
                 rem   check  to  see  if  a  file  exists
   
        if  exist  %1 D:\PowerRecFile\%folder% goto  fileexists
   goto  nofile
   
:fileexists
   
          set folder="Yes %Date:~-4,4%%Date:~-10,2%%Date:~-7,2%"
    mkdir %folder%       
    rem  other  commands  here .....
   goto  end
   
:nofile

   set folder="No %Date:~-4,4%%Date:~-10,2%%Date:~-7,2%"
   mkdir %folder%
   
   goto  end
   :end
------------------------------------------------------------------------------------------------------------
แต่ปัญหาคือ ถ้าผมสั่ง Batch file ด้านบน โดย Batch file จากเครื่อง Client ของผมดังโค๊ดด้านล่าง มันจะเช็ค File ไม่เจอ ทั้งๆที่ มีไฟล์นั้นอยู่
และกลับมาสร้าง Folder ตามชื่อที่กำหนด ที่เครื่อง Client ผมซะงั้น ทั้งๆที่ผมอยากให้สร้างไว้บน Server เลย ไม่เข้าใจเลยคำ เพิ่งเริ่มฝึกเขียน
-------------------------------------------------------------------------------------------------------------
@echo  off

call \\192.168.101.25\DATA\cfd1.bat
----------------------------------------------------

รบกวนหน่อยครับ หรือ ใครมีวิธีที่ดีกว่านี้ ช่วยด้วยนะ ต้องการจริงๆ ขอบคุณล่วงหน้าครับ

ออฟไลน์ M.a.k.u.b.e.x

  • Global Project Leader
  • *****
  • 3,790
  • 88
  • เพศ: ชาย
  • Are you alone in the Dark?
    • IT Solutions Consultant and Services Co., Ltd.
Re: ***รบกวน ขอความรู้หน่อยครับ Batch File ***
« ตอบกลับ #1 เมื่อ: 11 มิถุนายน 2014, 12:15:21 »
งง script ที่เขียนครับ


เอาเป็นว่าถ้าแค่ต้องการไห้มันสร้าง folder หากไม่เจอ ก็ทำแบบนี้

@IF EXIST %folder% echo %folder% existing
@IF NOT EXIST %folder% mkdir %newfolder%

แค่นี้พอครับ ไมต้องgotoไห้ปวดหัว DOS ไห้เขียนสั้นๆง่ายๆ ทำงานจากบนลงล่างจากซ้ายไปขวา

ถ้าจะทำแบบคุณก็

@IF EXIST %folder% mkdir Yes_%Date:~-4,4%%Date:~-10,2%%Date:~-7,2%
@IF NOT EXIST %folder% mkdir No_%Date:~-4,4%%Date:~-10,2%%Date:~-7,2%

แค่นี้ก็ได้แล้วนะ

ออฟไลน์ ~ RoNiN ~

  • *****
  • 553
  • 7
  • เพศ: ชาย
  • ทำดีแต่อย่าเด่นจะเป็นภัย
Re: ***รบกวน ขอความรู้หน่อยครับ Batch File ***
« ตอบกลับ #2 เมื่อ: 11 มิถุนายน 2014, 13:07:17 »
ถ้าจะเช็คไฟล์บน server แต่จะรัน batch บน client  ???

อย่างแรก บน Server มันเป็น share folder หรือปล่าวครับ
ถ้าใช่ ตอนสร้างไฟล์คุณต้องระบุ path มันไปด้วยนะเช่น
MD  \\192.168.101.25\DATA\Yes_%Date:~-4,4%%Date:~-10,2%%Date:~-7,2%

ส่วนของ CALL \\192.168.101.25\DATA\cfd1.bat มันคือการเรียกมารันที่เครื่องของคุณนะครับไม่ได้สั่งทำงานบน server

ถ้าอยากให้มันทำบน server อาจจะต้องใช้ tool อย่าง psexec ของ sysinternal ที่สามารถส่ง command ไปรันที่เครื่องเป้าหมายได้
Hello Thailand

Re: ***รบกวน ขอความรู้หน่อยครับ Batch File ***
« ตอบกลับ #3 เมื่อ: 12 มิถุนายน 2014, 08:34:09 »
 :) ขอบคุณทั้งสองท่านมากเลย ครับ เดี่ยวผมจะลองทำ ดูครับ มีปัญหาตรงไหนเดี๋ยวขอรบกวนอีกนะครับ

Re: ***รบกวน ขอความรู้หน่อยครับ Batch File ***
« ตอบกลับ #4 เมื่อ: 12 มิถุนายน 2014, 10:52:00 »
งง script ที่เขียนครับ


เอาเป็นว่าถ้าแค่ต้องการไห้มันสร้าง folder หากไม่เจอ ก็ทำแบบนี้

@IF EXIST %folder% echo %folder% existing
@IF NOT EXIST %folder% mkdir %newfolder%

แค่นี้พอครับ ไมต้องgotoไห้ปวดหัว DOS ไห้เขียนสั้นๆง่ายๆ ทำงานจากบนลงล่างจากซ้ายไปขวา

ถ้าจะทำแบบคุณก็

@IF EXIST %folder% mkdir Yes_%Date:~-4,4%%Date:~-10,2%%Date:~-7,2%
@IF NOT EXIST %folder% mkdir No_%Date:~-4,4%%Date:~-10,2%%Date:~-7,2%

แค่นี้ก็ได้แล้วนะ
ใกล้จะได้แล้วครับ ผมถามอีกหน่อย คือถ้าผมจะเช็ค ไฟล์ใน Server อะครับ ซึ่งไฟล์จะอยู่ใน Folder ที่ผมแชร์ไว้แล้ว
ผมจะชี้ Part ไปยังไงครับแบบสั้นๆ เหมือนที่พี่ยกตัวอย่างอะ (ผมลองแบบด้านล่าง มันบอกว่า The syntax of the command is incorrect) ครับ

 @IF EXIST \\192.168.101.25\DATA\Yes_%Date:~-4,4%%Date:~-10,2%%Date:~-7,2% mkdir Yes_%Date:~-4,4%%Date:~-10,2%%Date:~-7,2%
 @IF NOT EXIST \\192.168.101.25\DATA\Yes_%Date:~-4,4%%Date:~-10,2%%Date:~-7,2% mkdir No_%Date:~-4,4%%Date:~-10,2%%Date:~-7,2%
------------------------------------------------------------------------------------------------------------
แต่ถ้าทำแบบนี้อะเช็คและสร้างได้ครับ แต่ผมแค่สงสัยว่ามันจะมีวิธีเขียนที่ง่ายและสั้นกว่านี้ไหม ครับ ^_^

@echo  off
   
   if  exist  %1 \\192.168.101.25\DATA\Yes_%Date:~-4,4%%Date:~-10,2%%Date:~-7,2% goto  fileexists
   goto  nofile

:fileexists
   set folder="Yes %Date:~-4,4%%Date:~-10,2%%Date:~-7,2%"
   mkdir %folder%       
   goto  end
:nofile
   set folder="No %Date:~-4,4%%Date:~-10,2%%Date:~-7,2%"
   mkdir %folder%
   goto  end
:end
-------------------------------------------------------------------------------------------------------

ออฟไลน์ ~ RoNiN ~

  • *****
  • 553
  • 7
  • เพศ: ชาย
  • ทำดีแต่อย่าเด่นจะเป็นภัย
Re: ***รบกวน ขอความรู้หน่อยครับ Batch File ***
« ตอบกลับ #5 เมื่อ: 13 มิถุนายน 2014, 12:41:37 »
จะเข้าถึง share ผ่าน commandline ต้องใช้ net use
โค๊ด: [Select]
C:\Windows\System32>net use /?
The syntax of this command is:

NET USE
[devicename | *] [\\computername\sharename[\volume] [password | *]]
        [/USER:[domainname\]username]
        [/USER:[dotted domain name\]username]
        [/USER:[username@dotted domain name]
        [/SMARTCARD]
        [/SAVECRED]
        [[/DELETE] | [/PERSISTENT:{YES | NO}]]

NET USE {devicename | *} [password | *] /HOME

NET USE [/PERSISTENT:{YES | NO}]

กรณีนี้ก็ต้องไป map drive ก่อน โดย

โค๊ด: [Select]
net use O: \\192.168.101.25\DATA\
IF EXIST O:\Yes_aaabbbccc จะอะไรก็ว่ากันไป

ส่วนจะเขียนให้สั้นๆ ค่าที่ใช้ซ้ำๆใช้บ่อยๆให้ให้ยัดใส่ตัวแปร ด้วย SET เช่น
โค๊ด: [Select]
@ECHO OFF
SET dateStamp=%Date:~-4,4%%Date:~-10,2%%Date:~-7,2%

NET USE O: \\192.168.101.25\DATA\

IF EXIST O:\DATA\%dateStamp% MD O:\DATA\YES_%dateStamp%
IF NOT EXIST O:\DATA\%dateStamp% MD O:\DATA\NO_%dateStamp%
END

สั้นลงเยอะมั้ยครับ O0
Hello Thailand

Re: ***รบกวน ขอความรู้หน่อยครับ Batch File ***
« ตอบกลับ #6 เมื่อ: 19 มิถุนายน 2014, 12:15:22 »
จะเข้าถึง share ผ่าน commandline ต้องใช้ net use
โค๊ด: [Select]
C:\Windows\System32>net use /?
The syntax of this command is:

NET USE
[devicename | *] [\\computername\sharename[\volume] [password | *]]
        [/USER:[domainname\]username]
        [/USER:[dotted domain name\]username]
        [/USER:[username@dotted domain name]
        [/SMARTCARD]
        [/SAVECRED]
        [[/DELETE] | [/PERSISTENT:{YES | NO}]]

NET USE {devicename | *} [password | *] /HOME

NET USE [/PERSISTENT:{YES | NO}]

กรณีนี้ก็ต้องไป map drive ก่อน โดย

โค๊ด: [Select]
net use O: \\192.168.101.25\DATA\
IF EXIST O:\Yes_aaabbbccc จะอะไรก็ว่ากันไป

ส่วนจะเขียนให้สั้นๆ ค่าที่ใช้ซ้ำๆใช้บ่อยๆให้ให้ยัดใส่ตัวแปร ด้วย SET เช่น
โค๊ด: [Select]
@ECHO OFF
SET dateStamp=%Date:~-4,4%%Date:~-10,2%%Date:~-7,2%

NET USE O: \\192.168.101.25\DATA\

IF EXIST O:\DATA\%dateStamp% MD O:\DATA\YES_%dateStamp%
IF NOT EXIST O:\DATA\%dateStamp% MD O:\DATA\NO_%dateStamp%
END

สั้นลงเยอะมั้ยครับ O0

ขอบคุณมากเลยครับสำหรับข้อมูลเพิ่มเติม
ผมขอถามอีกหน่อยนะ คือว่า Batch files เนี่ย มีความสามารถในการแจ้งผลที่ผมเช็คการมีหรือไม่มีของ folder ผ่านทางการส่งอีเมลอัตโนมัติได้ไหมครับ ถ้าไม่ได้พอมีวิธีอื่นแนะนำไหมครับ ขอบคุณล่วงหน้าครับ

ออฟไลน์ ~ RoNiN ~

  • *****
  • 553
  • 7
  • เพศ: ชาย
  • ทำดีแต่อย่าเด่นจะเป็นภัย
Re: ***รบกวน ขอความรู้หน่อยครับ Batch File ***
« ตอบกลับ #7 เมื่อ: 21 มิถุนายน 2014, 01:36:38 »
ตามไปศึกษาต่อเลยครับ  :D
http://www.robvanderwoude.com/email.php
Hello Thailand

Re: ***รบกวน ขอความรู้หน่อยครับ Batch File ***
« ตอบกลับ #8 เมื่อ: 23 มิถุนายน 2014, 15:17:10 »
ตามไปศึกษาต่อเลยครับ  :D
http://www.robvanderwoude.com/email.php
ขอบคุณมากเลยครับ เดี่ยวจะลองศึกษาดูก่อน ติดตรงไหนขอรบกวนอีกทีนะครับ ^_^