เขียนตัวแปรหลายบรรทัดไปยัง. txt (CMD, NO .bat)


4

ฉันประสบความสำเร็จ รุนแรง %PATH% เป็นหลายบรรทัดเช่นนี้

set t=%PATH:;=^&echo.%

กว่านี้ แสดง แต่ละเส้นทางในบรรทัดใหม่เป็นอย่างที่ฉันต้องการ:

echo %t%

อย่างไรก็ตามเมื่อฉันต้องการ เขียน ตัวแปรเป็นไฟล์

echo %t% >paths.txt

บรรทัดสุดท้ายเท่านั้นที่ถูกเขียนไปยังไฟล์

ผมทำอะไรผิดหรือเปล่า?

ปรับปรุง

ปรากฎว่า set t=%PATH:;=^&echo.% คำสั่งไม่ได้แทนที่ ; ตัวละครที่มีตัวแบ่งบรรทัด (ตามที่ฉันบอก) แต่มันแทนที่ด้วย &echo.‌​ คำสั่งที่จะดำเนินการในภายหลัง

คำตอบ:


4

ผมทำอะไรผิดหรือเปล่า?

คุณต้องล้อมรอบสุดท้าย echo กับ ( และ )

(echo %t%) > paths.txt

ไฟล์แบตช์ที่ถูกต้อง (test.cmd):

@echo off
setlocal
set t=%PATH:;=^&echo.%
echo %t%
(echo %t%) > paths.txt
:endendlocal

ตัวอย่างการใช้งาน:

> test
C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0\
C:\apps\WSCC\Sysinternals Suite
C:\apps\WSCC\NirSoft Utilities
C:\apps\Calibre\
C:\apps\Git\cmd
C:\apps\Git\mingw64\bin
C:\apps\Git\usr\bin
C:\apps\nodejs\
C:\Users\DavidPostill\AppData\Roaming\npm
> type paths.txt
C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0\
C:\apps\WSCC\Sysinternals Suite
C:\apps\WSCC\NirSoft Utilities
C:\apps\Calibre\
C:\apps\Git\cmd
C:\apps\Git\mingw64\bin
C:\apps\Git\usr\bin
C:\apps\nodejs\
C:\Users\DavidPostill\AppData\Roaming\npm

ทางออกที่ง่ายกว่า

การแก้ปัญหานี้ไม่จำเป็นต้องใช้วงเล็บในเส้นทางที่จะหลบหนี

test.cmd:

@echo off
setlocal
for %%i in ("%path:;=";"%") do (
  echo %%~i >> paths.txt
)
:endendlocal

และจากบรรทัดคำสั่ง:

for %i in ("%path:;=";"%") do echo %~i >> paths.txt

อ่านเพิ่มเติม


ฉันเคยผูกมันไว้แล้ว ฉันได้ At this moment \Java\jdk1.6.0_39\bin\ was unexpected (คิดว่ามันพูดในภาษาโปแลนด์และฉันไม่แน่ใจว่าข้อความต้นฉบับมีลักษณะอย่างไร) ฉันมี `C: \ Program Files (x86) \ Java \ jdk1.6.0_39 \ bin` บน 3 บรรทัดในตัวแปรถ้าช่วยได้
Paweł Audionysos

แจ้งให้เราทราบหากฉันเข้าใจถูกต้อง ปริมาณตัวแปรของฉัน %t% ร้านค้าจริง echo. ยกย่องในตัวเอง? ที่ผูกแล้วจะถูกประหารชีวิต? เพราะฉันคิดว่าฉัน %t% ตัวแปรเก็บสตริงเดี่ยวที่เขียนไปยังไฟล์ ...
Paweł Audionysos

มันเก็บ echo คำสั่งในสตริง สตริงดูเหมือนว่า C:\Windows\system32&echo.C:\Windows&echo.C:\Windows\System32\Wbem&echo.C:\Windows\System32\WindowsPowerShell\v1.0\&echo.C:\apps\WSCC\Sysinternals Suite&echo.C:\apps\WSCC\NirSoft Utilities&echo.C:\apps\Calibre\&echo.C:\apps\Git\cmd&echo.C:\apps\Git\mingw64\bin&echo.C:\apps\Git\usr\bin&echo.C:\apps\nodejs\&echo.C:\Users\DavidPostill\AppData\Roaming\npm ในกรณีของฉัน
DavidPostill

1
@ PawełAudionysosฉันได้เพิ่มวิธีแก้ปัญหาที่ง่ายกว่าให้กับคำตอบซึ่งไม่จำเป็นต้องใช้วงเล็บในเส้นทางที่จะหลบหนี
DavidPostill

1
@ PawełAudionysosฉันได้เพิ่มโซลูชันบรรทัดคำสั่ง
DavidPostill

0

ของคุณ t ไม่ควรเก็บอักขระควบคุมพิเศษเป็นส่วนหนึ่งของเส้นทางเช่น ", &, |, % และอื่น ๆ ถ้าเป็นเช่นนั้นคุณสามารถแทนที่ตอนจบ ) ตัวละครที่มีสัญญาณรบกวนกับ parser:

(echo %t:)=^)%) > a

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.