Tôi cần chuyển ID và mật khẩu vào một tệp hàng loạt tại thời điểm chạy thay vì mã hóa cứng chúng vào tệp.
Đây là dòng lệnh trông như thế nào:
test.cmd admin [email protected] > test-log.txt
Một mẹo hữu ích khác là sử dụng %*
nghĩa là "tất cả". Ví dụ:
echo off
set arg1=%1
set arg2=%2
shift
shift
fake-command /u %arg1% /p %arg2% %*
Khi bạn chạy:
test-command admin password foo bar
tệp lô ở trên sẽ chạy:
fake-command /u admin /p password admin password foo bar
Tôi có thể có cú pháp hơi sai, nhưng đây là ý tưởng chung.
Đây là cách tôi đã làm điều đó:
@fake-command /u %1 /p %2
Đây là lệnh trông như thế nào:
test.cmd admin [email protected] > test-log.txt
Điều này %1
áp dụng cho tham số đầu tiên %2
(và đây là phần phức tạp) áp dụng cho tham số thứ hai. Bạn có thể có tối đa 9 tham số được truyền theo cách này.
Nếu bạn muốn xử lý các thông số bị thiếu một cách thông minh, bạn có thể làm như sau:
IF %1.==. GOTO No1
IF %2.==. GOTO No2
... do stuff...
GOTO End1
:No1
ECHO No param 1
GOTO End1
:No2
ECHO No param 2
GOTO End1
:End1
Truy cập các tham số hàng loạt có thể đơn giản với% 1,% 2, ...% 9 hoặc cũng có thể là% *,
nhưng chỉ khi nội dung đơn giản.
Không có cách nào đơn giản cho các nội dung phức tạp như "&"^&
, vì không thể truy cập% 1 mà không tạo ra lỗi.
set var=%1
set "var=%1"
set var=%~1
set "var=%~1"
Các dòng mở rộng thành
set var="&"&
set "var="&"&"
set var="&"&
set "var="&"&"
Và mỗi dòng không thành công, vì một dòng &
nằm ngoài dấu ngoặc kép.
Nó có thể được giải quyết bằng cách đọc từ một tệp tạm thời một phiên bản được chú ý của tham số.
@echo off
SETLOCAL DisableDelayedExpansion
SETLOCAL
for %%a in (1) do (
set "prompt="
echo on
for %%b in (1) do rem * #%1#
@echo off
) > param.txt
ENDLOCAL
for /F "delims=" %%L in (param.txt) do (
set "param1=%%L"
)
SETLOCAL EnableDelayedExpansion
set "param1=!param1:*#=!"
set "param1=!param1:~0,-2!"
echo %%1 is '!param1!'
Bí quyết là bật echo on
và mở rộng% 1 sau một rem
câu lệnh (cũng hoạt động với %2 .. %*
).
Vì vậy, thậm chí "&"&
có thể được lặp lại mà không tạo ra lỗi, như nó được nhận xét.
Nhưng để có thể chuyển hướng đầu ra của echo on
, bạn cần hai vòng lặp for.
Các ký tự phụ * #
được sử dụng để an toàn trước các nội dung như /?
(sẽ hiển thị sự trợ giúp cho REM
).
Hoặc dấu mũ ^ ở cuối dòng có thể hoạt động như một ký tự nhiều dòng, ngay cả sau dấu a rem
.
Sau đó đọc thông số rem đầu ra từ tệp, nhưng cẩn thận.
FOR / F sẽ hoạt động khi tắt mở rộng bị trì hoãn, các nội dung khác bằng "!" sẽ bị phá hủy.
Sau khi loại bỏ các ký tự thừa trong param1
, bạn đã có nó.
Và để sử dụng param1
một cách an toàn, hãy bật tính năng mở rộng bị trì hoãn.
Đúng, và đừng quên sử dụng các biến như %%1
khi sử dụng if
và for
và băng đảng.
Nếu bạn quên dấu kép %
, thì bạn sẽ thay thế trong các đối số dòng lệnh (có thể là null) và bạn sẽ nhận được một số thông báo lỗi khá khó hiểu.
Không cần phải phức tạp hóa nó. Nó chỉ đơn giản là lệnh% 1% 2 tham số, ví dụ,
@echo off
xcopy %1 %2 /D /E /C /Q /H /R /K /Y /Z
echo copied %1 to %2
pause
"Tạm dừng" hiển thị những gì tệp hàng loạt đã thực hiện và chờ bạn nhấn BẤT KỲ phím nào. Lưu nó dưới dạng xx.bat trong thư mục Windows.
Để sử dụng nó, hãy nhập, ví dụ:
xx c:\f\30\*.* f:\sites\30
Tệp lô này xử lý tất cả các thông số cần thiết, như chỉ sao chép các tệp mới hơn, v.v. Tôi đã sử dụng nó từ trước Windows. Nếu bạn muốn nhìn thấy tên của các tệp, khi chúng đang được sao chép, hãy bỏ qua Q
tham số.
Gần đây, một người bạn đã hỏi tôi về chủ đề này, vì vậy tôi nghĩ tôi sẽ đăng cách xử lý các đối số dòng lệnh trong các tệp hàng loạt.
Kỹ thuật này có một chút chi phí như bạn sẽ thấy, nhưng nó làm cho các tệp hàng loạt của tôi rất dễ hiểu và nhanh chóng để thực hiện. Cũng như hỗ trợ các cấu trúc sau:
>template.bat [-f] [--flag] [/f] [--namedvalue value] arg1 [arg2][arg3][...]
Các jist của nó là có :init
, :parse
và :main
các chức năng.
Ví dụ sử dụng
>template.bat /?
test v1.23
This is a sample batch file template,
providing command-line arguments and flags.
USAGE:
test.bat [flags] "required argument" "optional argument"
/?, --help shows this help
/v, --version shows the version
/e, --verbose shows detailed output
-f, --flag value specifies a named parameter value
>template.bat <- throws missing argument error
(same as /?, plus..)
**** ****
**** MISSING "REQUIRED ARGUMENT" ****
**** ****
>template.bat -v
1.23
>template.bat --version
test v1.23
This is a sample batch file template,
providing command-line arguments and flags.
>template.bat -e arg1
**** DEBUG IS ON
UnNamedArgument: "arg1"
UnNamedOptionalArg: not provided
NamedFlag: not provided
>template.bat --flag "my flag" arg1 arg2
UnNamedArgument: "arg1"
UnNamedOptionalArg: "arg2"
NamedFlag: "my flag"
>template.bat --verbose "argument #1" --flag "my flag" second
**** DEBUG IS ON
UnNamedArgument: "argument #1"
UnNamedOptionalArg: "second"
NamedFlag: "my flag"
template.bat
@::!/dos/rocks
@echo off
goto :init
:header
echo %__NAME% v%__VERSION%
echo This is a sample batch file template,
echo providing command-line arguments and flags.
echo.
goto :eof
:usage
echo USAGE:
echo %__BAT_NAME% [flags] "required argument" "optional argument"
echo.
echo. /?, --help shows this help
echo. /v, --version shows the version
echo. /e, --verbose shows detailed output
echo. -f, --flag value specifies a named parameter value
goto :eof
:version
if "%~1"=="full" call :header & goto :eof
echo %__VERSION%
goto :eof
:missing_argument
call :header
call :usage
echo.
echo **** ****
echo **** MISSING "REQUIRED ARGUMENT" ****
echo **** ****
echo.
goto :eof
:init
set "__NAME=%~n0"
set "__VERSION=1.23"
set "__YEAR=2017"
set "__BAT_FILE=%~0"
set "__BAT_PATH=%~dp0"
set "__BAT_NAME=%~nx0"
set "OptHelp="
set "OptVersion="
set "OptVerbose="
set "UnNamedArgument="
set "UnNamedOptionalArg="
set "NamedFlag="
:parse
if "%~1"=="" goto :validate
if /i "%~1"=="/?" call :header & call :usage "%~2" & goto :end
if /i "%~1"=="-?" call :header & call :usage "%~2" & goto :end
if /i "%~1"=="--help" call :header & call :usage "%~2" & goto :end
if /i "%~1"=="/v" call :version & goto :end
if /i "%~1"=="-v" call :version & goto :end
if /i "%~1"=="--version" call :version full & goto :end
if /i "%~1"=="/e" set "OptVerbose=yes" & shift & goto :parse
if /i "%~1"=="-e" set "OptVerbose=yes" & shift & goto :parse
if /i "%~1"=="--verbose" set "OptVerbose=yes" & shift & goto :parse
if /i "%~1"=="--flag" set "NamedFlag=%~2" & shift & shift & goto :parse
if not defined UnNamedArgument set "UnNamedArgument=%~1" & shift & goto :parse
if not defined UnNamedOptionalArg set "UnNamedOptionalArg=%~1" & shift & goto :parse
shift
goto :parse
:validate
if not defined UnNamedArgument call :missing_argument & goto :end
:main
if defined OptVerbose (
echo **** DEBUG IS ON
)
echo UnNamedArgument: "%UnNamedArgument%"
if defined UnNamedOptionalArg echo UnNamedOptionalArg: "%UnNamedOptionalArg%"
if not defined UnNamedOptionalArg echo UnNamedOptionalArg: not provided
if defined NamedFlag echo NamedFlag: "%NamedFlag%"
if not defined NamedFlag echo NamedFlag: not provided
:end
call :cleanup
exit /B
:cleanup
REM The cleanup function is only really necessary if you
REM are _not_ using SETLOCAL.
set "__NAME="
set "__VERSION="
set "__YEAR="
set "__BAT_FILE="
set "__BAT_PATH="
set "__BAT_NAME="
set "OptHelp="
set "OptVersion="
set "OptVerbose="
set "UnNamedArgument="
set "UnNamedArgument2="
set "NamedFlag="
goto :eof
@ECHO OFF
:Loop
IF "%1"=="" GOTO Continue
SHIFT
GOTO Loop
:Continue
Lưu ý: IF "%1"==""
sẽ gây ra sự cố nếu %1
được đặt trong chính dấu ngoặc kép.
Trong trường hợp đó, hãy sử dụng IF [%1]==[]
hoặc, chỉ trong NT 4 (SP6) và mới hơn, IF "%~1"==""
để thay thế.
Hãy giữ điều này đơn giản.
Đây là tệp .cmd.
@echo off
rem this file is named echo_3params.cmd
echo %1
echo %2
echo %3
set v1=%1
set v2=%2
set v3=%3
echo v1 equals %v1%
echo v2 equals %v2%
echo v3 equals %v3%
Đây là 3 cuộc gọi từ dòng lệnh.
C:\Users\joeco>echo_3params 1abc 2 def 3 ghi
1abc
2
def
v1 equals 1abc
v2 equals 2
v3 equals def
C:\Users\joeco>echo_3params 1abc "2 def" "3 ghi"
1abc
"2 def"
"3 ghi"
v1 equals 1abc
v2 equals "2 def"
v3 equals "3 ghi"
C:\Users\joeco>echo_3params 1abc '2 def' "3 ghi"
1abc
'2
def'
v1 equals 1abc
v2 equals '2
v3 equals def'
C:\Users\joeco>
FOR %%A IN (%*) DO (
REM Now your batch file handles %%A instead of %1
REM No need to use SHIFT anymore.
ECHO %%A
)
Điều này lặp lại trên các tham số lô (% *) hoặc chúng được trích dẫn hoặc không, sau đó lặp lại từng tham số.
Trong tệp hàng loạt
set argument1=%1
set argument2=%2
echo %argument1%
echo %argument2%
%1
và %2
trả về giá trị đối số thứ nhất và thứ hai tương ứng.
Và trong dòng lệnh, chuyển đối số
Directory> batchFileName admin [email protected]
Đầu ra sẽ là
admin
[email protected]
Tôi đã viết một script read_params đơn giản có thể được gọi dưới dạng một hàm (hoặc bên ngoài .bat
) và sẽ đặt tất cả các biến vào môi trường hiện tại. Nó sẽ không sửa đổi các tham số ban đầu vì hàm đang được chỉnh sửa call
với một bản sao của các tham số ban đầu.
Ví dụ, cho lệnh sau:
myscript.bat some -random=43 extra -greeting="hello world" fluff
myscript.bat
sẽ có thể sử dụng các biến sau khi gọi hàm:
call :read_params %*
echo %random%
echo %greeting%
Đây là chức năng:
:read_params
if not %1/==/ (
if not "%__var%"=="" (
if not "%__var:~0,1%"=="-" (
endlocal
goto read_params
)
endlocal & set %__var:~1%=%~1
) else (
setlocal & set __var=%~1
)
shift
goto read_params
)
exit /B
Hạn chế
-force
. Bạn có thể sử dụng -force=true
nhưng tôi không thể nghĩ ra cách cho phép các giá trị trống mà không biết trước danh sách các tham số sẽ không có giá trị.Changelog
-
trước các tham số.Để tham chiếu đến một biến tập hợp trong dòng lệnh, bạn sẽ cần sử dụng %a%
như vậy, ví dụ:
set a=100
echo %a%
rem output = 100
Lưu ý: Điều này hoạt động cho Windows 7 pro.
Lấy cảm hứng từ câu trả lời ở nơi khác của @Jon, tôi đã tạo ra một thuật toán tổng quát hơn để trích xuất các tham số được đặt tên, giá trị tùy chọn và công tắc.
Hãy để chúng tôi nói rằng chúng tôi muốn triển khai một tiện ích foobar
. Nó yêu cầu một lệnh ban đầu. Nó có một tham số tùy chọn --foo
nhận một giá trị tùy chọn (tất nhiên không thể là một tham số khác); nếu giá trị bị thiếu thì nó được mặc định là default
. Nó cũng có một tham số tùy chọn --bar
nhận một giá trị bắt buộc . Cuối cùng, nó có thể lấy một cờ --baz
không có giá trị cho phép. Ồ, và các thông số này có thể theo bất kỳ thứ tự nào.
Nói cách khác, nó trông như thế này:
foobar <command> [--foo [<fooval>]] [--bar <barval>] [--baz]
Đây là một giải pháp:
@ECHO OFF
SETLOCAL
REM FooBar parameter demo
REM By Garret Wilson
SET CMD=%~1
IF "%CMD%" == "" (
GOTO usage
)
SET FOO=
SET DEFAULT_FOO=default
SET BAR=
SET BAZ=
SHIFT
:args
SET PARAM=%~1
SET ARG=%~2
IF "%PARAM%" == "--foo" (
SHIFT
IF NOT "%ARG%" == "" (
IF NOT "%ARG:~0,2%" == "--" (
SET FOO=%ARG%
SHIFT
) ELSE (
SET FOO=%DEFAULT_FOO%
)
) ELSE (
SET FOO=%DEFAULT_FOO%
)
) ELSE IF "%PARAM%" == "--bar" (
SHIFT
IF NOT "%ARG%" == "" (
SET BAR=%ARG%
SHIFT
) ELSE (
ECHO Missing bar value. 1>&2
ECHO:
GOTO usage
)
) ELSE IF "%PARAM%" == "--baz" (
SHIFT
SET BAZ=true
) ELSE IF "%PARAM%" == "" (
GOTO endargs
) ELSE (
ECHO Unrecognized option %1. 1>&2
ECHO:
GOTO usage
)
GOTO args
:endargs
ECHO Command: %CMD%
IF NOT "%FOO%" == "" (
ECHO Foo: %FOO%
)
IF NOT "%BAR%" == "" (
ECHO Bar: %BAR%
)
IF "%BAZ%" == "true" (
ECHO Baz
)
REM TODO do something with FOO, BAR, and/or BAZ
GOTO :eof
:usage
ECHO FooBar
ECHO Usage: foobar ^<command^> [--foo [^<fooval^>]] [--bar ^<barval^>] [--baz]
EXIT /B 1
SETLOCAL
để các biến không thoát vào môi trường gọi.SET FOO=
, v.v. trong trường hợp ai đó định nghĩa chúng trong môi trường gọi.%~1
để loại bỏ dấu ngoặc kép.IF "%ARG%" == ""
và không IF [%ARG%] == []
vì [
và ]
không chơi sẽ ở tất cả với các giá trị kết thúc bằng dấu cách.SHIFT
ở trong một IF
khối, các vòng hiện tại chẳng hạn như %~1
không được cập nhật vì chúng được xác định khi IF
phân tích cú pháp. Bạn có thể sử dụng %~1
và %~2
bên trong IF
khối, nhưng sẽ rất khó hiểu vì bạn có SHIFT
. Bạn có thể đặt SHIFT
ở cuối khối cho rõ ràng, nhưng điều đó có thể bị lạc và / hoặc gây nhầm lẫn cho mọi người. Vì vậy, "bắt" %~1
và %~1
bên ngoài khối có vẻ tốt nhất.IF NOT "%ARG:~0,2%" == "--"
.SHIFT
khi bạn sử dụng một trong các tham số.SET FOO=%DEFAULT_FOO%
đáng tiếc là mã trùng lặp , nhưng giải pháp thay thế sẽ là thêm một mã IF "%FOO%" == "" SET FOO=%DEFAULT_FOO%
bên ngoài IF NOT "%ARG%" == ""
khối. Tuy nhiên vì đây vẫn là bên trong IF "%PARAM%" == "--foo"
khối, các %FOO%
giá trị sẽ được đánh giá và thiết lập trước khi bạn bước vào khối, vì vậy bạn sẽ không bao giờ phát hiện rằng cả các --foo
tham số đã có mặt và cũng là %FOO%
giá trị đã mất tích.ECHO Missing bar value. 1>&2
sẽ gửi thông báo lỗi đến stderr.ECHO:
hoặc một trong các biến thể.Tạo một tệp lô mới (ví dụ: openclass.bat) và viết dòng này vào tệp:
java %~n1
Sau đó, đặt tệp loạt vào, giả sử, thư mục system32, đi đến tệp lớp Java của bạn, nhấp chuột phải, Thuộc tính, Mở bằng ..., sau đó tìm tệp lô của bạn, chọn nó và đó là ...
Nó làm việc cho tôi.
Tái bút: Tôi không thể tìm thấy cách đóng cửa sổ cmd khi đóng lớp Java. Còn bây giờ ...
Để sử dụng vòng lặp lấy tất cả các đối số và trong lô thuần túy:
Obs: Để sử dụng mà không có:?*&<>
@echo off && setlocal EnableDelayedExpansion
for %%Z in (%*)do set "_arg_=%%Z" && set/a "_cnt+=1+0" && (
call set "_arg_[!_cnt!]=!_arg_!" && for /l %%l in (!_cnt! 1 !_cnt!
)do echo/ The argument n:%%l is: !_arg_[%%l]!
)
goto :eof
Mã của bạn đã sẵn sàng để thực hiện điều gì đó với số đối số mà nó cần, như ...
@echo off && setlocal EnableDelayedExpansion
for %%Z in (%*)do set "_arg_=%%Z" && set/a "_cnt+=1+0" && call set "_arg_[!_cnt!]=!_arg_!"
fake-command /u !_arg_[1]! /p !_arg_[2]! > test-log.txt
Giải pháp đơn giản (mặc dù câu hỏi đã cũ)
Test1.bat
echo off
echo "Batch started"
set arg1=%1
echo "arg1 is %arg1%"
echo on
pause
CallTest1.bat
call "C:\Temp\Test1.bat" pass123
đầu ra
YourLocalPath>call "C:\Temp\test.bat" pass123
YourLocalPath>echo off
"Batch started"
"arg1 is pass123"
YourLocalPath>pause
Press any key to continue . . .
Nơi YourLocalPath là đường dẫn thư mục hiện tại.
Để đơn giản, hãy lưu trữ lệnh param trong biến và sử dụng biến để so sánh.
Nó không chỉ đơn giản để viết mà còn đơn giản để duy trì, vì vậy nếu sau này một số người khác hoặc bạn đọc kịch bản của bạn sau một thời gian dài, nó sẽ dễ dàng hiểu và duy trì.
Để viết mã nội dòng: xem các câu trả lời khác.
Nếu bạn muốn chuyển các đối số trong một cặp khóa-giá trị, bạn có thể sử dụng một cái gì đó như sau:
@echo off
setlocal enableDelayedExpansion
::::: asigning arguments as a key-value pairs:::::::::::::
set counter=0
for %%# in (%*) do (
set /a counter=counter+1
set /a even=counter%%2
if !even! == 0 (
echo setting !prev! to %%#
set "!prev!=%%~#"
)
set "prev=%%~#"
)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: showing the assignments
echo %one% %two% %three% %four% %five%
endlocal
Và một ví dụ:
c:>argumentsDemo.bat one 1 "two" 2 three 3 four 4 "five" 5
1 2 3 4 5
Bạn cũng có thể đặt trước một số biến môi trường. Nó có thể được thực hiện bằng cách đặt chúng trong bảng điều khiển hoặc cài đặt chúng từ máy tính của tôi :
@echo off
if defined variable1 (
echo %variable1%
)
if defined variable2 (
echo %variable2%
)
và gọi nó như:
c:\>set variable1=1
c:\>set variable2=2
c:\>argumentsTest.bat
1
2
Bạn cũng có thể trỏ đến một tệp nơi các giá trị cần thiết được đặt trước. Nếu đây là tập lệnh:
@echo off
setlocal
::::::::::
set "VALUES_FILE=E:\scripts\values.txt"
:::::::::::
for /f "usebackq eol=: tokens=* delims=" %%# in ("%VALUES_FILE%") do set "%%#"
echo %key1% %key2% %some_other_key%
endlocal
và tệp giá trị là:
:::: use EOL=: in the FOR loop to use it as a comment
key1=value1
key2=value2
:::: do not left spaces arround the =
:::: or at the begining of the line
some_other_key=something else
and_one_more=more
đầu ra của việc gọi nó sẽ là:
value1 value2 cái gì đó khác
Tất nhiên bạn có thể kết hợp tất cả các cách tiếp cận. Cũng kiểm tra cú pháp đối số , shift
Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.
Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?
Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.
Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.
Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?
Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.
Màn hình Samsung Galaxy S9 Plus. Chủ nhật này là Ngày của Cha — trong trường hợp nó khiến bạn suy nghĩ — và thay vì mua cho anh ấy một chiếc cà vạt trong năm nay, có lẽ đã đến lúc bạn mua cho anh ấy thứ mà anh ấy sẽ thực sự sử dụng.
Monster Hunter: World yêu thích các sự kiện chéo. Dù có nghĩa là hóa trang thành Dante của Devil May Cry, giả dạng Horizon: Zero Dawn's Aloy, hay chiến đấu với quái vật Final Fantasy, các nhiệm vụ sự kiện khác nhau của Thế giới được nâng cấp tự do so với các trò chơi khác.
Storm Reid, Oprah Winfrey, Mindy Kaling, Reese Witherspoon và Ava DuVernay tại buổi chiếu đặc biệt của A Wrinkle in Time tại Nhà hát Walter Reade ở Thành phố New York vào ngày 7 tháng 3 năm 2018 “Ava rất mong được nói chuyện với bạn,” một trong những người của Array dư luận viên nói qua điện thoại. (Array là tập thể phân phối, nghệ thuật và vận động chính sách của Ava DuVernay tập trung vào các bộ phim của người da màu và phụ nữ.
Mission Impossible: Rogue Nation bắt đầu ở một cấp độ khác. Theo nghĩa đen.
McCain, người đang làm việc cho một album mới, lần đầu tiên bước vào vòng kết nối vào tối thứ Sáu ở Nashville
Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!
Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!
Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không
Đối với tôi, mọi thứ là về dòng đầu tiên đó và nó sẽ đưa bạn đến đâu. Một số nhà văn bị điều khiển bởi cốt truyện, sự sắp xếp tinh tế của các quân cờ, trong khi những người khác bị lôi cuốn bởi một nhân vật và khả năng thực hiện một cuộc hành trình với một người bạn hư cấu mới.
Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.
Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.
Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.